37
Методики оптимизации ожидания ресурсов (SQL Server Waits) в аналитических системах Дмитрий Артемов [email protected] SQL 2005 и SQL 2008

Методики оптимизации ожидания ресурсов (SQL Server Waits) в аналитических системах

  • Upload
    adamma

  • View
    87

  • Download
    0

Embed Size (px)

DESCRIPTION

SQL 2005 и SQL 2008. Методики оптимизации ожидания ресурсов (SQL Server Waits) в аналитических системах. Дмитрий Артемов [email protected]. Документация так себе. Что такое ожидание ?. Мы создали их для помощи в поиске проблем - PowerPoint PPT Presentation

Citation preview

Page 1: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Методики оптимизации ожидания ресурсов (SQL Server Waits) в аналитических системах

Дмитрий Артемов[email protected]

SQL 2005 и SQL 2008

Page 2: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Что такое ожидание?

Мы создали их для помощи в поиске проблемТам, давным давно (SQL 4.2) у нас были блокировки, сеть и операции ввода/выводаНо со временем мы малость увлеклисьИмя ожидания – на усмотрение разработчика

•I/O, Network, Thread, Memory

Ресурс

•Locks, Latches, and “bunch of others”

Синхронизация

•Yield or Sleep

Принуждение

•Preemption

Внешние

•Background tasks

Очередь

Документация так себе

SQL 2000 SQL 2005 SQL 2008 SQL 2008R2

0

200

400

600

78202

485 490

Page 3: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Как работает ожидание?

Разработчик пишет код, который

“исполняется”

Разработчик знает, что он может вызвать код,

который вынужден «ожидать»

Разработчик устанавливает

ожидание

Разработчик вызывает код SQLOS

для организации «ожидания»

Код фиксирует последний тип

ожидания

Любой, кто сделает выборку из DMV

видит ожидание и накопленное время

ожидания

Код сигнализирует об окончании

ожидания

Код очищает тип ожидания, время и

последний тип ожидания

Page 4: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Пример

Запрос на LCK_M_IS (Shared

Intent) блокировку

Запрос сталкивается с

конфликтом (кто-то уже занял

ресурс)

Создаем структуру

SOS_WaitInfo с типом ожидания

LCK_M_IS

Вызываем LockOwner::Sleep

Используем SOS_EventAuto

класс для организации

ожидания

Понимает механику диспетчера SQLOS

Ожидание приводит к вызову SignalObjectAndWait

()

Мы знаем, что

придется ждать

Обычное дело для SELECT

В итоге все сводится к вызову

WaitForSingleObject()или SignalObjectAndWait()

SOS_EventAuto – «обертка» для

объекта Windows Kernel Event

Page 5: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Кооперативная многозадачность SQL Server

Voluntary switching is roughly equivalent to a thread ordering an item that isn't ready to go at a fast-food counter. Rather than hold up the queue of the other diners, the thread will step aside and let the next thread place its order (execute its routine) while the first thread's hamburger is being prepared. When the hamburger is ready, the first thread goes to the end of the ready queue of the priority level.«Inside Microsoft Windows 2000» David A. Solomon, Mark RussinovichUMS implements a cooperative model. UMS relies on threads to voluntarily yield. UMS takes the approach it does in order to keep from involving the Windows kernel any more than absolutely necessary. In a system where worker threads can be counted on to yield when they should, a cooperative scheduler can actually be more efficient than a preemptive one because the scheduling process can be tailored to the specific needs of the application. UMS knows SQL Server's scheduling needs better than the operating system can be expected to. «The Guru's Guide to SQL Server Architecture and Internals» By Ken Henderson

Page 6: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Как увидеть ожидания?

sys.dm_os_wait_stats

sys.dm_exec_requests

sys.dm_os_waiting_tasks

sys.sysprocesses

Extended Events

Management Data Warehouse

Activity Monitor

Performance Monitor Counters

Историческая статистика

«Живая» информация

Обломки прошлого

Трассировка в SQL2008

Инструменты

Счетчик Wait Statistics

select er.session_id, er.wait_type from sys.dm_exec_requests er join sys.dm_exec_sessions es on er.session_id=es.session_id where es.is_user_process = 1 –- для выделения пользовательских процессов-- в sql server 2000 они всегда были SPID < 51, теперь могут быть любыми

Page 7: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Sysprocesses – нужно или нет?

Показывает открытые транзакции в неактивных потокахК тому же Sysprocesses показывает несколько строк для параллельных запросов

Однако можно сделать sys.dm_exec_requests join sys.dm_os_tasks

Page 8: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Ну, начнем!

Page 9: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Частые типы ожиданий

LCK_XXPAGELATCH

and PAGEIOLATCH

ASYNC_NETWORK_IO

Блокировки (механизм

синхронизации)

Намек: Сеть или

ваше приложени

е

Намек: задержк

а I/O

Намек: Ваше

приложение

В сумме ~50 типов ожидания

Ресурс

Намек: Системная

таблица или

аллокация

BUF latch - синхронизация

Page 10: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Некоторые типы не сигнализируют о проблемах

MISCELLANEOUS

• LAZYWRITER_SLEEP• SQLTRACE_BUFFER_FLUSH• CHECKPOINT_QUEUE• REQUEST_FOR_DEADLOCK_SEARCH

Ожидания фоновых процессов

CLR_AUTO_EVENT

BOL называет

их Queue Waits

Следовало бы назвать

«ожидания нет»

Нормально для SQL CLR

Page 11: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

CXPACKET – миф и реальность

Используется для синхронизации рабочих

процессов параллельного плана

Если есть – это всего лишь знак параллельного

плана

Вы ожидаете параллельные запросы?

У вас длительное время ожидания?

wait_resource показывает координацию

Длительные времена ожидания

сигнализируют о длительных

параллельных запросах

Посмотрите на текущие задания

Кто из них ожидает НЕ на

CXPACKET?

Проблема может лежать в ином

месте

Что делать?

Возможно ничего

Определите запросы, которые требуют

оптимизации

Используйте указатель MAXDOP

Измените настройку ‘max degree of

parallelism’

Sync

Не торопитесь с выводами

Чаще всего встречается в DW и

DSS типах приложений

Page 12: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

CXPACKET

Параллелизм реализуется на уровне компонентов запроса

В системе 2 процессора!

Page 13: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Пара слов про параллелизм

SQL Server способен выполнять запрос сразу на нескольких процессорахДля большинства крупных запросов параллелизм обеспечивает почти линейное масштабированиеОднако, использование параллелизма увеличивает накладные расходы на исполнение запросаОбычно параллелизм полезен в ситуации с относительно небольшим числом конкурентных запросов

Page 14: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Еще пара слов про пара…SQL Server строит параллельные планы горизонтально разделяя входные данные на примерно равные наборы

Каждый кусок назначается своему CPU

А затем производится выполнение одинаковых операций (агрегирование, соединение, …) на каждом куске

Page 15: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

non BUFFER Latch

•Не только для страниц буфера (BUF)•Для синхронизации структур памяти, иных чем страницы данных

Latch может быть

обобщенным

•В отличие от PAGELATCH и PAGEIOLATCH

Виден как LATCH_XX

•sys.dm_os_latch_stats•sys.dm_exec_requests.wait_resource

Сколько их?138 – SQL 2005145 – SQL 2008

Те же режимы как и для работы с буфером (KP, SH, UP,

EX, DT)Latch class

Sync

Page 16: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

FGCB_ADD_REMOVE latch

mydb.mdfAutogrow

INSERT

INSERT

INSERT

INSERT

FGCB

Нужно

место

Нужно

место

SQL Server Engine

Нужно

место

Нужно

место

“Нужно приращение”

LATCH_EX: FGCB_ADD_REMOV

E

Нужно оценить свободное место

LATCH_SH: FGCB_ADD_REM

OVE

Sync

Мораль: Используйте «Instant

file initialization» но… оно

не работает для

журнала

Page 17: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

SOS_SCHEDULER_YIELD

Задачу, которая не отходит «естественным образом» принуждают

к этому

•Что, если мы оплошали?

Примеры(когда мы заставляем

код передавать управление)

•Страницы, не требующие I/O•T-SQL переменные или просто “expressions”•Компиляция запросов•Мелкие запросы с hash и sort

Индикаторы

•Много ожиданий запросы с интенсивным использованием CPU•Длительные ожидания конкурентные запросы с интенсивным использованием CPU или кто-то не отпускает процессор как положено

************************** BEGIN STACK DUMP:* 10/17/09 15:51:52 spid 0** Non-yielding Scheduler*************************

Forced

Может быть

preemptive поток

I/O, Lock, Latch

Page 18: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

THREADPOOL

Прием TDS

пакета

Engine создает задачу в

среде SQLOS

Находит доступный

поток исполнител

я на диспетчере

Если потока нет, мы

выставляем ожидание

типа THREADPOOL

Когда поток

появляется, мы

передаем ему задачу

TDS Login

Если ждали слишком долго

10 сек по умолчанию - Login Timeout

Виден только среди waitstats

и tasks (не в списке requests)

Возможно понадобится

DAC для просмотра

PENDING tasks и work_queue_count в OS_schedulers

> 0

Применим к любой задаче

Вина на ком-то еще

Смотрите за другими ожиданиями

Очередь часто весьма длиннаНЕ лечите проблему

увеличением числа рабочих потоков

Resource

Request =

task + worker

Page 19: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Log Cache

Как насчет ожиданий на I/O

Mylog.ldf

Log WriterCOMMIT TRAN

Log BufferINSERT

Запись Log Buffer

Запрос на Log BufferВсе буферы

заняты

LOGBUFFER

WRITELOG

File

Copy model

SQLTrace File

Sort I/O

IO_COMPLETION

Zero Log Files

Создание файлов БД ASYNC_IO_COMPLETION

Mylog.ldf и .mdf

Backup media

VDI AppEngine

Workers

Page I/O

BACKUP WITH SNAPSHOT

DISKIO_SUSPEND

Resource

Sync

Resource

Resource

Sync

Page 20: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Запросы, память и RESOURCE semaphore

•Недостаток памяти или слишком много одновременных пользователей•MEMORYCLERK_SQLQUERYEXEC и MEMORYCLERK_SQLQERESERVATIONS clerks (по данным DBCC MEMORYSTATUS)•dm_exec_query_resource_semaphores•dm_exec_query_memory_grants•RESOURCE_SEMAPHORE_SMALL_QUERY waits

RESOURCE_SEMAPHORE(Вызывается при

недостатке памяти для запроса)

В SQL Server 2000 использовалось также

для компиляций

•Почему так много компиляций?•Из-за нехватки памяти или как результат “жадных на память” компиляций•Система следит за состоянием памяти и нагрузкой и накладывает ограничения на использование ресурсов (своего рода «ворота»)•Высокие требования запросов по памяти, может привести к недостатку памяти для компиляции•Не часто встречается на 64bit системах

RESOURCE_SEMAPHORE_QUERY_COM

PILE

Resource

Hash и sort

компиляции

sys.dm_os_memory_brokersDBCC MEMORYSTATUS

С появлением в SQL 2005 брокеров, управляющих распределением памяти, кеш запросов и кеш компиляций стали конкурентами

Page 21: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Resource_Semaphoresession_id

requested_memory_kb

granted_memory_kb

required_memory_kb

265 11,516,840 11,516,840 7,424299 11,516,832 11,516,832 2,048

Page 22: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Filtered statistics

Page 23: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Pre-emptive Waits

•Windows API•Xproc

Рабочие процессы становятся pre-emptive при

вызове «внешнего» API, который может занять

«некоторое» время

•Status = RUNNING•Wait_type = NULL

Как это выглядело до

SQL 2008?

•Status = RUNNING•Wait_type = PREEMPTIVE_XXXX

Как это выглядит для

SQL 2008?

External

************************* * BEGIN STACK DUMP:* 10/17/09 15:51:52 spid 0** Non-yielding Scheduler*************************

Код может быть сложнее чем

просто API вызов

Page 24: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Что можно увидеть?Тип Описание Сценарий

PREEMPTIVE_OS_GETPROCADDRESS 

Оборачивает вызовы GetProcAddress() и xproc функций

Характеристика времени исполнения xproc

PREEMPTIVE_OS_WRITEFILEGATHER

Оборачивает вызовы WriteFileGather() для обнуления секции файла

Длительные приращения жернала или файла БД (если не используется instant file init)

PREEMPTIVE_OS_LOOKUPACCOUNTSID

Оборачивает вызовыLookupAccountSid()

В основном используется при Windows аутентификации. Длительные ожидания могут говорить о проблемах с контроллером домена.

PREEMPTIVE_OLEDBOPS Оборачивают различные фрагменты кода, вызывающего методы OLE-DB для запросов к связанным серверам..

Помогает заполнить пробеля там, где не установлены ожидания для OLEDB.

~190 типов

Page 25: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Почему плохо использовать Profiler через GUI?

Потому что он вызывает внешние компонентыПотому что процессоры занимаются в основном переключением контекста, а рабочие процессы сидят на ожидании TRACEWRITE

preemptive_switches_count context_switches_count

TSQL 653 3270960GUI 418333 5057811

wait_type waiting_tasks_count wait_time_ms max_wait_time_ms signal_wait_time_msTRACEWRITE 6264780 222240185 215 36752462

wait_type waiting_tasks_count wait_time_ms max_wait_time_ms signal_wait_time_msTRACEWRITE 0 0 0 0

Page 26: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Расширенные события и ожидания

wait_info

“Обычные”

ожидания(file_io,

network,Sleep)

wait_info_external

Pre-emptive

ожидания

wait_type

opcode

Timings

Можно получить текст запроса, данные о сессии или стек вызовов

Сессия умолчания System_Health Session включает эту информацию

SQLCAT “Waits Stats Per Session” (www.codeplex.com)

См. dm_xe_map_val

ues

Начало и окончание

Duration, Total, Max

Page 27: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Есть и другие “ожидания”

log_reuse_wait “loader lock wait”

sessions Spinlocks

Resource Governor

backoffs в sys.dm_os_spinlock_s

tats

“Почему не урезается журнал”

Плохо написанна

я DLL

PRECONNECT статус

Ручное управлени

е

Page 28: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Огласите весь список, пожалуйста!

• Нет исходников? См. sys.dm_xe_map_values для SQL Server 2008

См заголовочный файл в исходниках

Список в документации (http://msdn.microsoft.com/en-us/library/ms179984.aspx)

KB 822101 только про типы для SQL 2000 и раньше

• Новые «открытия»• Комментарии • Использовать блог для обновления BOL• Размещение в блоге сценариев и доп. информации

Развитие RepositoryThe Wait Type

Repository Blog

Page 29: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

РесурсыБлог CSS Escalation (http://blogs.msdn.com/psssql/)

The Wait Type Repository Blog Post (http://blogs.msdn.com/psssql/archive/2009/11/03/the-sql-server-wait-type-repository.aspx)

Документация по sys.dm_os_wait_stats

SQLCAT Waits Stats Per Session CodePlex (http://sqlcat.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=26601)

Craig Freedman – статьи о параллелизме (http://blogs.msdn.com/craigfr/archive/tags/Parallelism/default.aspx)

Блог CLR Wait Types (http://blogs.msdn.com/psssql/archive/2008/02/05/high-waits-on-clr-manual-event-and-clr-auto-event.aspx)

Документ “SQL Server 2005 Waits and Queues“ (http://technet.microsoft.com/en-us/library/cc966413.aspx)

Блог System_Health XEvent Session (http://blogs.msdn.com/psssql/archive/2008/07/15/supporting-sql-server-2008-the-system-health-session.aspx)

Page 30: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Appendix

Page 31: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

What does MDW tell you about I/O Waits

sync reads, sorts, SQLTrace I/O, load

CLR assembly

Backups, Recovery, DBM

Buffer Pool I/O for pages

WRITELOG wait time =

Log Flush Wait (perfmon)

LOGBUFFER is just waiting on folks

waiting on WRITELOG

MDW - Management Data Warehouse

Page 32: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

The mapping has changed

KB 822101 wrong for 2005

and 2008

Page 33: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

What’s About These?SLEEP_TASK

• Fixed time• Hard to figure out scenario

DBMIRROR_DBM_EVENT

• Log shipping delayed to secondary

OLEDB

• Wrapped around linked server OLE-DB API calls• Wait time will fluctuate since set and cleared for each call• wait_resource is remote server and remote SPID• PREEMPTIVE_XX type can now also show up

CMEMTHREAD

• Thread synchronization for memory allocation• High wait times = A likely bug

Forced

Resource

External

Sync

Hot stored proc in SQL Server 2005

Page 34: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Прошу вас заполнить форму с оценкой сессии!

Page 35: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Официальные курсы и сертификация Microsoft

Более 300 официальных курсов Microsoft доступно в России. Официальные курсы можно прослушать только в авторизованных учебных центрах Microsoft

под руководством опытного сертифицированного инструктора Microsoftинтенсивное обучение с акцентом на практикуболее 80-и учебных центров более чем в 20-и городах России (+ дистанционные и выездные курсы)

Сертификат Microsoft - показатель квалификации ИТ-специалиста для работодателя .

• Microsoft предлагает гибкую систему сертификаций.

• Все курсы, учебные центры и центры тестирования: www.microsoft.com/rus/learning

40% Доказательство № 75

сертифицированных специалистов считают, что сертификация помогла им получить работу или повышение

57% Доказательство № 119

рекрутеров считают сертификацию сотрудников одним из критериев для повышения в должности

Page 36: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Специальные предложенияСертификационный пакет со вторым шансом

Пакеты экзаменационных ваучеров со скидкой от 15 до 20% и бесплатной пересдачей («вторым шансом»). Все экзамены сдаются одним человеком.

Сэкономьте 15% на сертификации вашей ИТ-команды

Пакет из 10-и экзаменационных ваучеров со скидкой 15% для сотрудников ИТ-отдела. «Второй шанс» включен. Ваучеры можно произвольно распределять между сотрудниками.

Microsoft Certified Career ConferenceПервая 24-часовая глобальная виртуальная конференция с 18 ноября с 15.00 (моск. время) по 19 ноября 2010 г.Сессии по технологиям и построению карьерыСкидка 50% для сертифицированных специалистов Microsoft и студентов

Бесплатная подписка на TechNet для слушателей официальных курсов

Некоторые курсы по SharePoint, Windows 7; Windows Server 2008; SQL Server 2008

Детали: www.microsoft.com/rus/learning

С 22 ноября 2010 г. – подписка TechNet

бесплатно для слушателей курсов.

Количество ограничено!

Page 37: Методики оптимизации ожидания ресурсов (SQL  Server  Waits) в аналитических системах

Спасибо!Вопросы?