
В рамках периодических процедур проверки работоспособности Confluence для наших клиентов мы также проверяем, насколько эффективно используется приложение и лицензии.
Как повысить повысить скорость работы приложения и процессов без дополнительных инвестиций в сервера? Для начала — оценить его текущее состояние. Мы рады поделиться скриптами по проверке различных параметров для принятия решений об оптимизации системы.
Скрипты работают с базой данных PostgreSQL, она самая популярная для Confluence. Их можно легко адаптировать и под другие базы данных — Oracle, MySQL, MS SQL. Дайте нам знать, если понадобится помощь.
7 готовых скриптов для Confluence:
25 biggest attachments
Ищем самые большие прикрепленные файлы, смотрим, что это, насколько они нужны и должны храниться и занимать место в самом приложении.
SELECT DISTINCT c.title AS attachmentTitle, u.username AS uploadedBy, s.spacekey, co.title AS pageTitle, cn.longval/1024/1024 as mbytes
FROM CONTENT AS c
JOIN USER_MAPPING AS u
ON u.user_key = c.creator
JOIN CONTENT AS co
ON c.pageid = co.contentid
JOIN CONTENTPROPERTIES AS cn
ON cn.contentid = c.contentid
JOIN SPACES AS s
ON c.spaceid = s.spaceid
WHERE c.contenttype = 'ATTACHMENT'
AND cn.longval IS NOT NULL
ORDER BY mbytes DESC LIMIT 25;
Inactive users
Проверяем неактивных пользователей, возможно, их следует удалить вообще.
SELECT cu.user_name, cu.first_name, cu.last_name, cu.created_date, cu.updated_date, cd.directory_name
FROM cwd_user cu
JOIN cwd_directory cd ON cu.directory_id = cd.id
WHERE cu.active = 'F';
Users with old last login data
Проверяем пользователей, которые давно не заходили в Confluence, решаем, нужно ли тратить на них лицензии.
SELECT cu.user_name, cu.first_name, cu.last_name, cu.email_address,
li.successdate, li.PREVsuccessdate
FROM logininfo li
JOIN user_mapping um ON um.user_key = li.username
JOIN cwd_user cu ON um.username = cu.user_name
JOIN cwd_directory cd ON cu.directory_id = cd.id
where li.successdate < '2019-10-01'
ORDER BY successdate;
Spaces with large volume of attachments
Ищем спейсы с самым большим количеством атачментов (прикрепленных файлов), изучаем, что они из себя представляют, оптимизируем.
select
s.spacekey,
sum(LONGVAL/1024/1024)
FROM
contentproperties cp
JOIN content c
ON
cp.contentid = c.contentid
JOIN spaces s
ON
s.spaceid = c.spaceid
WHERE
c.contenttype = 'ATTACHMENT'
AND
cp.propertyname = 'FILESIZE'
GROUP BY
s.spacekey
oRDER BY sum(LONGVAL) desc
;
Largest pages
Изучаем самые объемные страницы, оптимизируем.
SELECT s.spacekey, c.title, LENGTH(bc.body)
FROM BODYCONTENT bc
JOIN CONTENT c ON bc.contentid = c.contentid
JOIN SPACES s ON c.spaceid = s.spaceid
WHERE c.prevver IS NULL AND c.contenttype IN ('BLOGPOST','PAGE')
ORDER BY LENGTH(bc.body) DESC LIMIT 25;
Pages with the biggest sum of version sizes
Находим страницы с самым большим количеством версией. Иногда это могут быть десятки и сотни тысяч версий. Избавляемся от избыточности.
SELECT s.spacekey, c.title, subq.sum_size_in_bytes / 1024/1024
FROM CONTENT c
JOIN SPACES s ON c.spaceid = s.spaceid
JOIN (
SELECT c2.prevver, SUM(LENGTH(bc.body)) AS sum_size_in_bytes
FROM BODYCONTENT bc
JOIN CONTENT c2 ON bc.contentid = c2.contentid
WHERE c2.prevver IS NOT NULL AND c2.contenttype IN ('BLOGPOST','PAGE')
GROUP BY c2.prevver
ORDER BY SUM(LENGTH(bc.body)) DESC LIMIT 25
) AS subq ON c.contentid = subq.prevver
ORDER BY subq.sum_size_in_bytes DESC;
All about calendars
Календари — это сложная и ресурсозатратная структура в Confluence. Анализируем, что с ними происходит. Иногда бывает, что существует сотни забытых календарей. Избавляемся от них.
SELECT um.lower_username as creator, tc."NAME" as calendar_name, to_timestamp(CAST(tc."CREATED" AS bigint)/1000) as creation_date
FROM "AO_950DC3_TC_SUBCALS" tc
JOIN user_mapping um ON um.user_key = tc."CREATOR"
WHERE tc."PARENT_ID" IS NULL
ORDER BY creator;
Это только вершина айсберга, небольшая часть того, что мы проверяем, чтобы добиться хорошего перфоманса, надежности и безотказности Confluence.
Не нашли подходящего решения? Запланируйте бесплатную консультацию, и мы обсудим ваш проект.