Вашему вниманию предлагается макет сценария и методики, позволяющей организовать учёт исполнения хранимых процедур пользовательской базы данных. Пример сценария само-достаточен, т.е. для его успешной работы необходимо только заменить в тексте сценария слово 'ТУТДОЛЖНОБЫТЬИМЯВАШЕЙБАЗЫДАННЫХ!!!!!!!!!!!!!!!!' на имя вашей базы данных, использование процедур которой необходимо отслеживать. Сценарий создаёт задание Агента SQL Server, которое по установленному расписанию (расписание подбирается в зависимости от нагрузки сервера) исполняет сценарий T-SQL. Исполняемый заданием сценарий создаёт по необходимости в базе TEMPDB таблицу Activproc, и потом записывает в ней статистику использования процедур, получая актуальные на момент исполнения метаданные сервера. Для того, чтобы понять принципы работы сценария, ознакомьтесь с теми разделами BOL, в которых описаны задействованные в сценарии административные динамические представления и функции.
25.4.23
Tips for DBA: Store Performance Counters in Database (Job-Step: Power Shell)
С помощью Power Shell и нового в SQL Server 2008 типа шага в заданиях по расписанию, который позволяет запускать под управлением SQL Server Agent сценарии Power Shell, теперь можно получить абсолютно любые счётчики производительности. Причём, сделать это можно как для локального, так и удалённого в сети сервера. А получение сведений о счётчиках посредством WMI избавляет от необходимости агрегации сырых значений, что делает этот метод простым и понятным.
Tips for DBA: Signal Waits vs. Resource Waits
Прочитал сегодня интересный рецепт, как быстро определить, кто даёт слабину, процессор или дисковая подсистема. Ну и заодно в очередной раз убедился в полезности книжки: Проектированиеи оптимизация доступа к базам данных Microsoft SQL Server 2005. Учебный курсMicrosoft (+ CD-ROM)
Авторы этого учебного курса
считают, что соотношение суммарных ожиданий процессоров и ввода-вывода можно
использовать для того, чтобы определить, кто из них из-за кого простаивает.
Впрочем, вот выдержка из этой замечательной книги, со страницы 400:
Одной из самых сложных задач, с которыми сталкиваются разработчики баз данных, является прогнозирование поведения приложения в реальных условиях. Чтобы иметь точное представление о характеристиках производительности приложения, разработчик должен знать конкретную причину любого состояния ожидания, которое возникает во время выполнения приложения. На самом общем уровне состояния ожидания можно разбить на две категории: ожидание сигнала и ожидание ресурса. В SQL Server ожидание сигнала происходит, когда планировщик ждет процессор, чтобы запланировать задачу, а ожидание ресурса возникает, когда задача получила время процессора, но находится в ожидании ресурсов диска или памяти. При исследовании состояний ожидания в приложении нужно иметь в виду следующее. Если отношение времени ожидания сигнала ко времени ожидания ресурса велико (т.е. если состояний ожидания сигнала значительно больше, чем состояний ожидания ресурса), это может служить показателем неэффективного использования процессора. Если же велик коэффициент отношения времени ожидания ресурса ко времени ожидания сигнала, это может указывать на неэффективное использование ресурсов диска. Приступая к оценке производительности приложения, разработчики должны понимать, какой из типов ожидания преобладает. К счастью, SQLOS предоставляет "окно" в систему, достаточно прозрачное для того, чтобы разработчики могли использовать его для ответа на этот вопрос.
Tips for DBA: INSERT Overclocking
Одной из трудно оптимизируемых задач SQL Server является вставка. Не раз мне приходилось сталкиваться с ситуациями, когда уже и схема оптимизирована под вставку, и сайзинг файлов вставке не препятствует, а желаемой производительности массовой или не массовой вставки достичь не удаётся. Не хватает совсем немногого…
Разработчики SQL Server 2008
позаботились о том, чтобы предоставить нам с вами в распоряжение некую «палочку
– выручалочку», которая призвана как раз снизить затраты на вставку, путём её
не полного журналирования. Для этого предлагается задействовать на серверах
флаг трассировки 610, который по моим наблюдениям действительно может немного
облегчить вставку. Флаг, и его побочные эффекты, подробно описан тут: The Data Loading Performance Guide
Ещё одна мера, в дополнение к
включению флага трассировки 610, описана в документе вендора: SQL Server Best Practices Article.
Там, среди прочего, подробно описано исследование того, что будет эффективней,
вставка в таблицу с единственным некластеризованным индексом, или вставка в
таблицу с единственным кластеризованным индексом. Кластеризация данных может
дать выигрыш на вставке до 3%.
Вот такие маленькие хитрости
попались мне на глаза в документации Майкрософт. Быть может, кто-нибудь из
читателей этого блога поделиться в комментариях своими маленькими хитростями?
В тему:
Tips for DBA: Table operational/physical stats
Вашему вниманию предлагается сценарий, который для каждой таблицы текущей базы данных показывает статистику по операциям INSERT, UPDATE и DELITE. Кроме этого, вы может оценить, к чему эти операции приводят, с точки зрения роста строк данных, занимаемых страниц и фрагментации. Сценарий основан на использовании двух функций динамического управления: sys.dm_db_index_operational_stats и sys.dm_db_index_physical_stats
/*
Внимание!!! Запрос исполняется несколько минут */
SELECT t.name
AS [TableName]
, fi.page_count AS [Pages]
, fi.record_count AS [Rows]
, CAST(fi.avg_record_size_in_bytes
AS int) AS [AverageRecordBytes]
, CAST(fi.avg_fragmentation_in_percent
AS int) AS [AverageFragmentationPercent]
, SUM(iop.leaf_insert_count)
AS [Inserts]
, SUM(iop.leaf_delete_count)
AS [Deletes]
, SUM(iop.leaf_update_count)
AS [Updates]
, SUM(iop.row_lock_count) AS [RowLocks]
, SUM(iop.page_lock_count) AS [PageLocks]
FROM sys.dm_db_index_operational_stats(DB_ID(),NULL,NULL,NULL) AS iop
JOIN sys.indexes AS i
ON ((iop.index_id
= i.index_id) AND (iop.object_id = i.object_id))
JOIN sys.tables AS t
ON i.object_id = t.object_id
AND i.type_desc
IN ('CLUSTERED', 'HEAP')
JOIN sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'SAMPLED') AS fi
ON fi.object_id=CAST(t.object_id AS int)
AND fi.index_id=CAST(i.index_id AS int)
AND fi.index_id
< 2
GROUP BY t.name, fi.page_count,
fi.record_count
, fi.avg_record_size_in_bytes,
fi.avg_fragmentation_in_percent
ORDER BY [TableName]
21.4.23
Tips for DBA: Logical Disk FreeSpace Notification
В SQL Server с помощью службы SQL Server Agent и PowerShell можно достаточно просто соорудить задание, которое будет заглядывать в метаданные WMI локального или удалённого сервера, и сообщать по электронной почте, в случае если свободное место на указанном диске перешагнуло заданный порог. Ниже представлен облегчённый концепт сценария подобного задания (расписаний в нём нет и данные берутся по локальному серверу). Вам нужно будет заменить фиктивный адрес на реальный и указать почтовый профиль, если нельзя воспользоваться профилем по умолчанию.
Tips for DBA: Percentage of work completed for DBA commands
Как вы наверняка знаете, повторное исполнение команды KILL для сеанса показывает процент завершения отката прерванной инструкции. Это замечательная возможность, которая позволяет сберечь нервы администратора баз данных. Однако, есть и другие долгоиграющие команды, процент завершения которых тоже интересно было бы отслеживать. Ну, например, примерно таким же образом, как сообщает о прогрессе своей работы команда BACKUP. Вашему вниманию предлагается сценарий, который позволяет отслеживать прогресс исполнения следующих команд:
- ALTER
INDEX REORGANIZE
- AUTO_SHRINK
с ALTER DATABASE
- BACKUP
DATABASE
- CREATE
INDEX
- DBCC
CHECKDB
- DBCC
CHECKFILEGROUP
- DBCC
CHECKTABLE
- DBCC
INDEXDEFRAG
- DBCC
SHRINKDATABASE
- DBCC
SHRINKFILE
- KILL
(Transact-SQL)
- RESTORE
DATABASE
- UPDATE STATISTICS
Tips for DBA: Log Flush Performance
Одной из распространённых задач систем с высокой транзакционной загрузкой является определение того, достаточно ли производительна подсистема ввода-вывода, обслуживающая журнал транзакций. Часто «узким местом» становиться дисковая подсистема, используемая в качестве долговременного носителя для файла журнала транзакций обслуживаемой SQL Server базы данных. Одним из важных параметров дисковой подсистемы является время доступа к данным на диске. Современным дисковым подсистемам характерно время доступа порядка 1 – 5 ms. Проверить, какое время доступа у используемой для размещения файла журнала транзакций дисковой подсистемы можно с помощью административного динамического представления: sys.dm_os_wait_stats (Transact-SQL). Данные в этом представлении накапливаются с момента последнего запуска службы SQL Server, поэтому, рекомендуется очистить эту статистику.
MSMQ 3.0 в Кластере
Здесь будет идти речь о кластере Windows Server 2003 Enterprise Edition и о запуске в кластере службы MSMQ. MSMQ, как кластерный ресурс, зависит от двух кластерных ресурсов: сетевого имени и физического диска. Зависимость от сетевого имени позволяет идентифицировать кластерную группу по IP адресу, и позволяет клиентам обращаться к группе как к виртуальному серверу. Физический диск нужен для хранилища сообщений и очередей.
Настройка Windows Server 2008/2003 x64 для обслуживания SQL Server 2008
По состоянию на 2009 год
Эта статья - вольная интерпретация рекомендаций: Microsoft, IBM, HP, Dell, QLogic, LSI, EMC, ACER, Bull, Fujitsu, Hitachi, NEC и Unisys. Некоторые рекомендуемые настройки требуют отдельного, обстоятельного разговора, и потому не включены в эту статью, а найти эти рекомендации можно в этом блоге.
20.4.23
Флаги трассировки для эталонного теста производительности TPC-C
По материалам статьи: Microsoft SQL Server 2005 TPC-C Trace Flags
Наиболее часто используемым способом изменения поведения SQL Server является выставление флагов трассировки. Следующие флаги трассировки поддерживаются в настоящее время Майкрософт для публикации результатов тесов производительности, таких как TPC-C. Если сотрудники Майкрософт рекомендуют Вам использовать другие флаги трассировки, которые не представлены в списке ниже, пожалуйста, сообщите об этом Джейми Редингу (Jamie.Reding@Microsoft.com) или Чарльзу Левину (Charles.Levine@Microsoft.com) до того, как вы опубликуете использование этих флагов.
Флаги трассировки для эталонного теста производительности TPC-E
По материалам статьи: Microsoft SQL Server 2008 TPC-E Trace Flags
Наиболее часто используемым
способом изменения поведения SQL Server является выставление флагов
трассировки. Следующие флаги трассировки поддерживаются в настоящее время
Майкрософт для публикации результатов тесов производительности TPC-E.
Если сотрудники Майкрософт рекомендуют Вам использовать другие флаги
трассировки, которые не представлены в списке ниже, пожалуйста, сообщите об
этом Джейми Редингу (Jamie.Reding@Microsoft.com)
или Чарльзу Левину (Charles.Levine@Microsoft.com)
до того, как вы опубликуете использование этих флагов.
Единственными поддерживаемыми для SQL Server 2008 флагами трассировки для TPC-E
являются флаги: -T661 -T834 -T3502 -T8744.
Единственным поддерживаемыми для SQL Server 2008 параметрами запуска сервера
для теста TPC-E являются параметры: -c -E -x, которые хорошо описаны в BOL.