понедельник, 21 июля 2008 г.

Оптимизация системной базы данных TempDB в SQL Server 2005

Системная база данных TempDb участвует в работе пользователей, подключённых ко всем пользовательским базам данных инстанса.

TempDb используется при работе с временными таблицами и процедурами, в ней создаются внутренние (internal) и пользовательские объекты (user objects) промежуточных результатов запросов и т.п.. При запуске сервера, TempDb создаётся заново на.

В версии SQL Server 2005 имеется ряд особенностей относительно TempDb по сравнению с более ранними версиями. Локальные временные таблицы и табличные функции при использовании в хранимых процедурах, функциях или триггерах кешируются. Те из них, которые используются часто, остаются в кеше дольше, редко используемые удаляются раньше, что позволяет экономить пространство кеша. В TempDB, с целью уменьшения операций ввода/вывода сокращено логирование.

К наиболее часто встречающимся проблемам относятся: превышение свободного дискового пространства, чрезмерно большое количество операций ввода-вывода из-за “тяжёлых” запросов, блокировка объектов во время DDL операций, конфликты при одновременном размещении объектов.

Для контроля правильности работы TempDB применяются счётчики производительности. Одной из частых проблем является неограниченное увеличение размера базы данных, этот параметр можно контролировать при помощи счётчиков Database: Log File(s) Size(KB) и Database: Log File(s) Used (KB) Некоторые важные счётчики появились в версии SQL Server 2005: Free Space in tempdb (KB) , Version Store Size (KB) , Version Generation Rate (KB/s) , Version Cleanup Rate (KB/s). Мониторинг tempdb можно также проводить при помощи динамических представлений

SELECT SUM (user_object_reserved_page_count)*8 as usr_obj_kb,SUM (internal_object_reserved_page_count)*8 as internal_obj_kb,SUM (version_store_reserved_page_count)*8 as version_store_kb,SUM (unallocated_extent_page_count)*8 as freespace_kb,SUM (mixed_extent_page_count)*8 as mixedextent_kbFROM sys.dm_db_file_space_usage

этот запрос позволяет получить данные об используемом дисковом пространстве. если в процентном соотношении пользовательские объекты в TempDb занимают больше всего места, это свидетельствует о том, что создаётся много пользовательских структур (временных таблиц, переменных и т.п.). Если основная часть пространства расходуется на внутренние объекты (internal), значит основная нагрузка формируется из построения планов запросов. В этом случае оптимизация запросов, введение новых индексов, позволить уменьшить использование TempDb. Если основную часть занимают версии (versions) - нужно обратить внимание на наличие длительных транзакций. Системные представления

sys.dm_db_session_space_usage и sys.dm_db_task_space_usage позволяют выявить сессии наиболее активно использующие TempDb SELECT top 5 * FROM sys.dm_db_session_space_usage ORDER BY (user_objects_alloc_page_count + internal_objects_alloc_page_count) DESC SELECT top 5 * FROM sys.dm_db_task_space_usage ORDER BY (user_objects_alloc_page_count +internal_objects_alloc_page_count) DESC Извесным способом оптимизации использования

TempDb является её вынесение на отдельный жёсткий диск и разбиение MDF файла на части, по числу процессоров. Ссылки: http://www.microsoft.com/technet/prodtechnol/sql/2005/workingwithtempdb.mspx http://sql-server-pages.com/editorial/tempdb_performance.aspx http://support.microsoft.com/default.aspx?scid=kb;en-us;328551

Комментариев нет:

Locations of visitors to this page