Обслуживание системы¶
Замена лицензии¶
Параметры текущей используемой лицензии вы можете посмотреть в приложении Tessa Admin
на вкладке Информация
.
Лицензия - это файл с расширением *.tlic
, который хранится на сервере приложений Tessa.
Для замены лицензии на новую необходимо:
-
На сервере приложений Tessa в файле app.json в папке веб-сервиса web найти строку вида
"LicenseFile": "@Syntellect.tlic",
Note
Указанный путь к файлу
app.json
актуален при типовой установке платформы.В строке указывается путь к файлу лицензии (
@
перед именем файла означает, что файл лицензии лежит в той же папке, что и текущий конфигурационный файл). -
Скопируйте новый файл лицензии на сервер и укажите путь к новому файлу лицензии, или замените старый.
Note
Для редактирования файла
app.json
требуются права администратора.Данный конфигурационный файл относится также и к легкому клиенту, поэтому отдельно для легкого клиента заменять файл лицензии не требуется.
-
Для сервиса Chronos также необходимо заменить файл лицензии или указать путь к новой лицензии в конфигурационном файле
app.json
. -
Поле этого перезапустите пул приложений
tessa
.
Перестроение индексов¶
После длительной работы системы или массового создания карточек (десятки тысяч карточек) основные индексы в таблицах фрагментируются. В т.ч. фрагментируются кластерные индексы по ID карточки, производительность которых напрямую определяет время открытия карточек. В связи с этим рекомендуется вызывать перестроение индексов.
Ниже приводится скрипт по перестроению всех индексов во всех таблицах базы данных, который рекомендуется к периодическому выполнению для базы данных Tessa. Рекомендуется запускать скрипт раз в месяц или после массового создания более чем 50000 карточек.
Warning
Скрипт выполняется длительное время и “парализует” работу системы. Поэтому его следует вызывать ночью или на выходных, когда пользователи не работают в системе и все вычислительные мощности сервера СУБД SQL Server могут быть выделены для перестроения индексов.
DECLARE @TableName varchar(255)
DECLARE TableCursor CURSOR FOR
SELECT table_name FROM information_schema.tables
WHERE table_type = 'base table'
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
DBCC DBREINDEX(@TableName,' ',90)
FETCH NEXT FROM TableCursor INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor
Статистика по таблицам¶
Администратор системы может выполнить запрос SQL, чтобы получить подробный отчёт по таблицам и материализованным представлениям по таким показателям, как распределение свободного и занятого места для индексов и всей таблицы (здесь и далее под “таблицей” подразумевается, как собственно таблица, так и материализованное представление).
Отчёт содержит следующие колонки:
-
object_id – идентификатор таблицы в метаинформации SQL, который можно использовать для получения дополнительной информации из системных таблиц sys.***.
-
name – имя таблицы.
-
type – тип объекта (U – таблица, V – представление).
-
total_rows – общее количество строк в таблице.
-
total_space – общий размер таблиц в КиБ (1 КиБ = 1024 байт), включая незадействованное на страницах место. Складывается из общего используемого места used_space и общего неиспользуемого места unused_space.
-
used_space – общее используемое место в КиБ.
-
unused_space – общее неиспользуемое место в КиБ.
-
index_space – общее место в КиБ, занимаемое страницами с индексами.
-
data_space – общее место в КиБ, занимаемое страницами с данными.
-
is_heap – признак того, что таблица является heap’ом, т.е. не содержит кластерного индекса. Значение “0” определяет наличие кластерного индекса, а значение “1” - его отсутствие.
-
partitions – количество партиций (разделов), которые используются таблицей. Значение будет больше “1” только для тех таблиц, для которых явно задана схема партиционирования в SQL. Платформа Tessa не поддерживает создание и редактирование партиций штатными средствами, но платформа совместима со схемами партиционирования, заданными в SQL.
-
indexes – общее количество страниц, занимаемых индексами.
Результат запроса:
Текст запроса SQL:
SELECT
o.[object_id]
, name = s.name + '.' + o.name
, o.[type]
, i.total_rows
, total_space = CAST(i.total_pages * 8. / 1024 AS DECIMAL(18,2))
, used_space = CAST(i.used_pages * 8. / 1024 AS DECIMAL(18,2))
, unused_space = CAST((i.total_pages - i.used_pages) * 8. / 1024 AS DECIMAL(18,2))
, index_space = CAST(i.inx_pages * 8. / 1024 AS DECIMAL(18,2))
, data_space = CAST(data_pages * 8. / 1024 AS DECIMAL(18,2))
, is_heap
, i.[partitions]
, i.[indexes]
FROM sys.objects o
JOIN sys.schemas s ON o.[schema_id] = s.[schema_id]
JOIN (
SELECT
i.[object_id]
, is_heap = MAX(CASE WHEN i.index_id = 0 THEN 1 ELSE 0 END)
, total_pages = SUM(a.total_pages)
, used_pages = SUM(a.used_pages)
, inx_pages = SUM(a.used_pages - CASE WHEN a.[type] !=1 THEN a.used_pages WHEN p.index_id IN(0,1) THEN a.data_pages ELSE 0 END)
, data_pages = SUM(CASE WHEN a.[type] != 1 THEN a.used_pages WHEN p.index_id IN (0,1) THEN a.data_pages END)
, total_rows = SUM(CASE WHEN i.index_id IN (0, 1) AND a.[type] = 1 THEN p.[rows] END)
, [partitions] = COUNT(DISTINCT p.partition_number)
, [indexes] = COUNT(DISTINCT p.index_id)
FROM sys.indexes i
JOIN sys.partitions p ON i.[object_id] = p.[object_id] AND i.index_id = p.index_id
JOIN sys.allocation_units a ON p.[partition_id] = a.container_id
WHERE i.is_disabled = 0
AND i.is_hypothetical = 0
GROUP BY i.[object_id]
) i ON o.[object_id] = i.[object_id]
WHERE o.[type] IN ('V', 'U')
AND o.is_ms_shipped = 0
ORDER BY i.total_pages DESC