Upload
adamma
View
87
Download
0
Embed Size (px)
DESCRIPTION
SQL 2005 и SQL 2008. Методики оптимизации ожидания ресурсов (SQL Server Waits) в аналитических системах. Дмитрий Артемов [email protected]. Документация так себе. Что такое ожидание ?. Мы создали их для помощи в поиске проблем - PowerPoint PPT Presentation
Citation preview
Методики оптимизации ожидания ресурсов (SQL Server Waits) в аналитических системах
Дмитрий Артемов[email protected]
SQL 2005 и SQL 2008
Что такое ожидание?
Мы создали их для помощи в поиске проблемТам, давным давно (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
Как работает ожидание?
Разработчик пишет код, который
“исполняется”
Разработчик знает, что он может вызвать код,
который вынужден «ожидать»
Разработчик устанавливает
ожидание
Разработчик вызывает код SQLOS
для организации «ожидания»
Код фиксирует последний тип
ожидания
Любой, кто сделает выборку из DMV
видит ожидание и накопленное время
ожидания
Код сигнализирует об окончании
ожидания
Код очищает тип ожидания, время и
последний тип ожидания
Пример
Запрос на LCK_M_IS (Shared
Intent) блокировку
Запрос сталкивается с
конфликтом (кто-то уже занял
ресурс)
Создаем структуру
SOS_WaitInfo с типом ожидания
LCK_M_IS
Вызываем LockOwner::Sleep
Используем SOS_EventAuto
класс для организации
ожидания
Понимает механику диспетчера SQLOS
Ожидание приводит к вызову SignalObjectAndWait
()
Мы знаем, что
придется ждать
Обычное дело для SELECT
В итоге все сводится к вызову
WaitForSingleObject()или SignalObjectAndWait()
SOS_EventAuto – «обертка» для
объекта Windows Kernel Event
Кооперативная многозадачность 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
Как увидеть ожидания?
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, теперь могут быть любыми
Sysprocesses – нужно или нет?
Показывает открытые транзакции в неактивных потокахК тому же Sysprocesses показывает несколько строк для параллельных запросов
Однако можно сделать sys.dm_exec_requests join sys.dm_os_tasks
Ну, начнем!
Частые типы ожиданий
LCK_XXPAGELATCH
and PAGEIOLATCH
ASYNC_NETWORK_IO
Блокировки (механизм
синхронизации)
Намек: Сеть или
ваше приложени
е
Намек: задержк
а I/O
Намек: Ваше
приложение
В сумме ~50 типов ожидания
Ресурс
Намек: Системная
таблица или
аллокация
BUF latch - синхронизация
Некоторые типы не сигнализируют о проблемах
MISCELLANEOUS
• LAZYWRITER_SLEEP• SQLTRACE_BUFFER_FLUSH• CHECKPOINT_QUEUE• REQUEST_FOR_DEADLOCK_SEARCH
Ожидания фоновых процессов
CLR_AUTO_EVENT
BOL называет
их Queue Waits
Следовало бы назвать
«ожидания нет»
Нормально для SQL CLR
CXPACKET – миф и реальность
Используется для синхронизации рабочих
процессов параллельного плана
Если есть – это всего лишь знак параллельного
плана
Вы ожидаете параллельные запросы?
У вас длительное время ожидания?
wait_resource показывает координацию
Длительные времена ожидания
сигнализируют о длительных
параллельных запросах
Посмотрите на текущие задания
Кто из них ожидает НЕ на
CXPACKET?
Проблема может лежать в ином
месте
Что делать?
Возможно ничего
Определите запросы, которые требуют
оптимизации
Используйте указатель MAXDOP
Измените настройку ‘max degree of
parallelism’
Sync
Не торопитесь с выводами
Чаще всего встречается в DW и
DSS типах приложений
CXPACKET
Параллелизм реализуется на уровне компонентов запроса
В системе 2 процессора!
Пара слов про параллелизм
SQL Server способен выполнять запрос сразу на нескольких процессорахДля большинства крупных запросов параллелизм обеспечивает почти линейное масштабированиеОднако, использование параллелизма увеличивает накладные расходы на исполнение запросаОбычно параллелизм полезен в ситуации с относительно небольшим числом конкурентных запросов
Еще пара слов про пара…SQL Server строит параллельные планы горизонтально разделяя входные данные на примерно равные наборы
Каждый кусок назначается своему CPU
А затем производится выполнение одинаковых операций (агрегирование, соединение, …) на каждом куске
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
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» но… оно
не работает для
журнала
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
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
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
Запросы, память и 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 брокеров, управляющих распределением памяти, кеш запросов и кеш компиляций стали конкурентами
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
Filtered statistics
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 вызов
Что можно увидеть?Тип Описание Сценарий
PREEMPTIVE_OS_GETPROCADDRESS
Оборачивает вызовы GetProcAddress() и xproc функций
Характеристика времени исполнения xproc
PREEMPTIVE_OS_WRITEFILEGATHER
Оборачивает вызовы WriteFileGather() для обнуления секции файла
Длительные приращения жернала или файла БД (если не используется instant file init)
PREEMPTIVE_OS_LOOKUPACCOUNTSID
Оборачивает вызовыLookupAccountSid()
В основном используется при Windows аутентификации. Длительные ожидания могут говорить о проблемах с контроллером домена.
PREEMPTIVE_OLEDBOPS Оборачивают различные фрагменты кода, вызывающего методы OLE-DB для запросов к связанным серверам..
Помогает заполнить пробеля там, где не установлены ожидания для OLEDB.
~190 типов
Почему плохо использовать 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
Расширенные события и ожидания
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
Есть и другие “ожидания”
log_reuse_wait “loader lock wait”
sessions Spinlocks
Resource Governor
backoffs в sys.dm_os_spinlock_s
tats
“Почему не урезается журнал”
Плохо написанна
я DLL
PRECONNECT статус
Ручное управлени
е
Огласите весь список, пожалуйста!
• Нет исходников? См. 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
РесурсыБлог 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)
Appendix
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
The mapping has changed
KB 822101 wrong for 2005
and 2008
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
Прошу вас заполнить форму с оценкой сессии!
Официальные курсы и сертификация Microsoft
Более 300 официальных курсов Microsoft доступно в России. Официальные курсы можно прослушать только в авторизованных учебных центрах Microsoft
под руководством опытного сертифицированного инструктора Microsoftинтенсивное обучение с акцентом на практикуболее 80-и учебных центров более чем в 20-и городах России (+ дистанционные и выездные курсы)
Сертификат Microsoft - показатель квалификации ИТ-специалиста для работодателя .
• Microsoft предлагает гибкую систему сертификаций.
• Все курсы, учебные центры и центры тестирования: www.microsoft.com/rus/learning
40% Доказательство № 75
сертифицированных специалистов считают, что сертификация помогла им получить работу или повышение
57% Доказательство № 119
рекрутеров считают сертификацию сотрудников одним из критериев для повышения в должности
Специальные предложенияСертификационный пакет со вторым шансом
Пакеты экзаменационных ваучеров со скидкой от 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
бесплатно для слушателей курсов.
Количество ограничено!
Спасибо!Вопросы?