Сравнение архитектуры двух СУБД.
Избранные административные представления.
- Описание
- Подробнее
Описание
Предисло вие.
Если человек еще в состоянии обучаться, то это нужно делать систематически, результаты обучения должны быть измеримы, например — подтверждены сертификатом или дипломом. Поэтому в своих публикациях я стараюсь придерживаться тематики экзамена 1С:Эксперт по технологическим вопросам. Поводом для статьи послужил вебинар http://edu.1c.ru/expert/ который произвел на меня превосходное впечатление. Ниже используются материалы вебинара, спасибо Виктору Богачёву.
Рядом с каждым утверждением содержится ссылка на документацию — буквы MS, PG.
Избранные административные представления и функции.
Список баз данных.
[ Наименование, идентификатор…]
[ MS Sys.databases (состояние базы данных, доступность, режим RCSI, модель восстановления (full, simple), настройки создания и обновления статистики, отметка о включении Query Stories, …) ]
[ PG pg_database ]
Список индексов.
[ Реквизиты: идентификатор индекса, идентификатор таблицы, уникальность, доступность к использованию, кластеризованность…]
[ MS sys.indexes ]
[ PG pg_index ]
Список статистик.
[Содержит гистограммы…]
[ MS sys.dm_db_stats_histogram ]
[ PG pg_stats ]
Информация о таблицах
[ MS sys.tables ]
[ PG pg_class (содержит информацию по таблицам, индексам, статистикам…)
Пример определения размера таблицы (отношения) и базы данных по списку и спец. функцией:
SELECT
relname,
relpages,
reltuples
FROM pg_class
ORDER BY relpages DESC
LIMIT 9;
--SELECT pg_database_size(current_database());
--SELECT pg_relation_size('pg_statistic')
]
Избранные динамические административные представления и функции.
[ MS Для просмотра DMV требуются права VIEW SERVER STATE, VIEW DATABASE STATE. Данные статистики накапливаются с момента запуска сервера SQL, но некоторые DMV могут быть очищены.
Тексты запросов MS SQL заимствованы из статей (Ian Stirk) Uncover Hidden Data to Optimize Application Performance и Troubleshooting Performance Problems in SQL Server 2005 ]
[ PG для сброса статистики pg_stat_reset(). При перезапуске сервера статистика сохраняется, если нет восстановления БД после запуска. Параметры postgresql.conf, влияющие на сбор статистики:
track_activities мониторинг текущих команд
track_counts сбора статистики по обращениям к таблицам и индексам.
track_functions отслеживание использования пользовательских функций.
track_io_timing мониторинг времени чтения и записи блоков.]
Выполнение запросов (Exec)
[ MS
sys.dm_exec_query_plan (параметр вызова plan_handle, поле query_plan cодержит представление Showplan…)
sys.dm_exec_query_stats (количество выполнений, статистика (total, last, min, max) по времени ЦП, физическому чтению, логическому чтению/записи, времени выполнения, количеству строк, степени параллелизма, объему памяти…)
sys.dm_exec_requests (информация о выполняющихся запросах…)
sys.dm_exec_sql_text (параметр вызова sql_ handle или plan_handle, содержит текст запроса…)
Пример:
SELECT
[Query plan] = qp.query_plan,
[Query text] = qt.text,
QueryState.[Total Reads],
QueryState.[Execution count]
FROM (SELECT TOP 10
[Total Reads] = (total_logical_reads),
[Execution count] = (qs.execution_count),
[sql_handle] = qs.sql_handle,
[plan_handle] = qs.plan_handle
FROM sys.dm_exec_query_stats AS qs
ORDER BY [Total Reads] DESC) AS QueryState
CROSS APPLY sys.dm_exec_sql_text(QueryState.sql_handle) AS qt
CROSS APPLY sys.dm_exec_query_plan(QueryState.plan_handle) AS qp
]
[ PG
pg_stat_statements (статистика по выполнению запросов: число выполнений, длительность, количество строк, процент использования буферного кеша, количество прочитанных/записанных блоков, время чтения/записи… Чтобы начать собирать статистику, нужно добавить модуль pg_stat_statements в файле postgresql.conf, строка pg_stat_statements и выполнить CREATE EXTENSION pg_stat_statements. Для очистки используйте SELECT pg_stat_statements_reset();)
Пример:
SELECT
query,
calls,
total_time,
rows,
100.0 * shared_blks_hit / nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
FROM pg_stat_statements
ORDER BY total_time DESC LIMIT 5;
]
Индексы (Index)
[ MS
sys.dm_db_index_usage_stats (статистика: количество использований…)
sys.dm_db_missing_index_group_stats (возможный выигрыш…)
sys.dm_db_missing_index_details (родительская таблица, условия полей…)
sys.dm_db_missing_index_groups (содержит связь между dm_db_missing_index_group_stats и dm_db_missing_index_details.)
Пример:
SELECT TOP 10
[Total Cost] = ROUND(Stat.avg_total_user_cost * Stat.avg_user_impact * (Stat.user_seeks + Stat.user_scans),0),
Stat.avg_user_impact,
TableName = Detail.statement,
[EqualityUsage] = Detail.equality_columns,
[InequalityUsage] = Detail.inequality_columns,
[Include Cloumns] = Detail.included_columns
FROM sys.dm_db_missing_index_groups Groups
INNER JOIN sys.dm_db_missing_index_group_stats Stat
ON Stat.group_handle = Groups.index_group_handle
INNER JOIN sys.dm_db_missing_index_details Detail
ON Detail.index_handle = Groups.index_handle
ORDER BY [Total Cost] DESC;
Результат работы — список недостающих индексов. Создавать индексы нужно средствами 1С. Соответствие между именами 1С и СУБД — функция "ПолучитьСтруктуруДанных". Информация "Include Cloumns" показывает, что как использовать включенные столбцы индекса в СУБД, но в 1С такой возможности нет — поэтому для полей "Include Cloumns" также создаем индексы.