SQLServerWaits

Содержание

Слайд 2

Докладчик Евгений Хабаров DBA в одной и московских финансовых компаний Независимый

Докладчик

Евгений Хабаров
DBA в одной и московских финансовых компаний
Независимый консультант
Когда-то работал разработчиком
Email:

sql@dev.ms
Blog: http://sql.dev.ms
Twitter: @gR4mm
Слайд 3

Наши спонсоры

Наши спонсоры

Слайд 4

О чем этот доклад? Проблема, есть ли она? Ожидание - что

О чем этот доклад?

Проблема, есть ли она?
Ожидание - что это? 
Потоки и

ресурсы
Очереди
Демо
Слайд 5

Проблема RUN QUERY

Проблема

RUN QUERY

Слайд 6

Задача администратора Сделать так, чтобы все работало быстро Для этого потребуется:

Задача администратора

Сделать так, чтобы все работало быстро
Для этого потребуется:
Локализовать проблему
Найти

причину возникновения
И устранить ее
Слайд 7

Как искать проблему? DMV Perfmon Extended Events Activity monitor Анализ планов

Как искать проблему?

DMV
Perfmon
Extended Events
Activity monitor
Анализ планов
ТОП-10 запросов
SCOM / Zabbix etc.
Анализ ожиданий

Слайд 8

Сессии Connection SPID (session_id) Scheduler 0 Logical CPU 0 Scheduler 1

Сессии

Connection

SPID (session_id)

Scheduler 0

Logical CPU 0

Scheduler 1

Logical CPU 1

Scheduler 2

Logical CPU 2

Scheduler

3

Logical CPU 3

Единовременно на одном планировщике может быть только один активный таск. (Task state = RUNNING)

Слайд 9

Статусы сессии RUNNING – task выполняется в данный момент на каком-либо

Статусы сессии

RUNNING – task выполняется в данный момент на каком-либо ядре
Только

один task на одном ядре единовременно
SUSPENDED – task ожидает некоторый ресурс
Дисковая подсистема
Сеть
Блокировки
Память
RUNNABLE – ресурс получен, task ожидает процессора
BACKGROUND – для фоновых процессов ( resource monitor, deadlock monitor)
SLEEPING - ожидание новых команд, работа не производится
Слайд 10

Круговорот статусов сессии select * from sys.dm_exec_requests where status = 'running'

Круговорот статусов сессии

select *
from sys.dm_exec_requests
where status = 'running'

select *
from sys.dm_exec_requests
where status

= 'runnable'

select *
from sys.dm_os_waiting_tasks

select *
from sys.dm_exec_requests
where status = ‘suspended'

Слайд 11

Очереди

Очереди

Слайд 12

Очереди

Очереди

Слайд 13

Очереди

Очереди

Слайд 14

Что такое ожидание? Объекты, которые разработчики использовали для своих нужд Показывает,

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

Объекты, которые разработчики использовали для своих нужд
Показывает, что именно

ждет сессия.
SQL сервер всегда отслеживает ожидания с момент старта сервера, как только ожидание происходит, он увеличивает соответствующий счетчик.
Названия для типов ожиданий выбираются разработчиками на их усмотрение.
А все потому, что раньше надо было смотреть только на IO, блокировки и сеть
Соответственно, документация неполная
Слайд 15

Инструменты sys.dm_os_waiting_tasks sys.dm_exec_requests sys.dm_os_wait_stats sys.dm_os_tasks sys.sysprocesses Текущее состояние Исторические данные Параллелизм

Инструменты

sys.dm_os_waiting_tasks
sys.dm_exec_requests

sys.dm_os_wait_stats

sys.dm_os_tasks
sys.sysprocesses

Текущее состояние

Исторические данные

Параллелизм

PerfMon – SQL Server: Wait Statistics

Общее время wait_time_ms (RUNNIG

>…> RUNNIG )
Ожидание процессора (RUNNABLE > RUNNING) - singnal_wait_time_ms
Ожидание ресурса = wait_time_ms - singnal_wait_time_ms

Extended Events – объект Wait_info

Слайд 16

Не все ожидания одинаково полезны* BROKER_EVENTHANDLER BROKER_RECEIVE_WAITFOR BROKER_TASK_STOP BROKER_TO_FLUSH BROKER_TRANSMITTER CHECKPOINT_QUEUE

Не все ожидания одинаково полезны*

BROKER_EVENTHANDLER
BROKER_RECEIVE_WAITFOR
BROKER_TASK_STOP
BROKER_TO_FLUSH
BROKER_TRANSMITTER
CHECKPOINT_QUEUE
CHKPT
CLR_AUTO_EVENT
CLR_MANUAL_EVENT
CLR_SEMAPHORE
DBMIRROR_DBM_EVENT
DBMIRROR_EVENTS_QUEUE
DBMIRROR_WORKER_QUEUE
DBMIRRORING_CMD
DIRTY_PAGE_POLL
DISPATCHER_QUEUE_SEMAPHORE
EXECSYNC
FSAGENT
FT_IFTS_SCHEDULER_IDLE_WAIT
FT_IFTSHC_MUTEX
HADR_CLUSAPI_CALL
HADR_FILESTREAM_IOMGR_IOCOMPLETION
HADR_LOGCAPTURE_WAIT
HADR_NOTIFICATION_DEQUEUE
HADR_TIMER_TASK
HADR_WORK_QUEUE
KSOURCE_WAKEUP
LAZYWRITER_SLEEP
LOGMGR_QUEUE
ONDEMAND_TASK_QUEUE
PWAIT_ALL_COMPONENTS_INITIALIZED
QDS_PERSIST_TASK_MAIN_LOOP_SLEEP
QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP
REQUEST_FOR_DEADLOCK_SEARCH

RESOURCE_QUEUE
SERVER_IDLE_CHECK
SLEEP_BPOOL_FLUSH
SLEEP_DBSTARTUP
SLEEP_DCOMSTARTUP
SLEEP_MASTERDBREADY
SLEEP_MASTERMDREADY
SLEEP_MASTERUPGRADED
SLEEP_MSDBSTARTUP
SLEEP_SYSTEMTASK
SLEEP_TASK
SLEEP_TEMPDBSTARTUP
SNI_HTTP_ACCEPT
SP_SERVER_DIAGNOSTICS_SLEEP
SQLTRACE_BUFFER_FLUSH
SQLTRACE_INCREMENTAL_FLUSH_SLEEP
SQLTRACE_WAIT_ENTRIES
WAIT_FOR_RESULTS
WAITFOR
WAITFOR_TASKSHUTDOWN
WAIT_XTP_HOST_WAIT
WAIT_XTP_OFFLINE_CKPT_NEW_LOG
WAIT_XTP_CKPT_CLOSE
XE_DISPATCHER_JOIN
XE_DISPATCHER_WAIT
XE_TIMER_EVENT

Источник: http://www.sqlskills.com/blogs/paul/wait-statistics-or-please-tell-me-where-it-hurts/

Слайд 17

Топ-Х PAGEIOLATCH_* PAGELATCH_* CXPACKET WRITELOG LCK_M_* RESOURCE_SEMAPHORE_QUERY_COMPILE CMEMTHREAD ASYNC_NETWORK_IO OLEDB SOS_SCHEDULER_YIELD TRACEWRITE BACKUPIO/BACKUPBUFFER THREADPOOL

Топ-Х

PAGEIOLATCH_*
PAGELATCH_*
CXPACKET
WRITELOG
LCK_M_*
RESOURCE_SEMAPHORE_QUERY_COMPILE
CMEMTHREAD
ASYNC_NETWORK_IO
OLEDB
SOS_SCHEDULER_YIELD
TRACEWRITE
BACKUPIO/BACKUPBUFFER
THREADPOOL

Слайд 18

PAGEIOLATCH_XX где XX - SH – чтение EX – запись RUN

PAGEIOLATCH_XX

где XX -
SH – чтение
EX – запись

RUN QUERY

select *
from Sales.SalesOrderHeader

Buffer

pool

PAGE 14:1:4533

Page not found

DISK

PAGEIOLATCH_XX

Слайд 19

Причины PAGEIOLATCH_XX Необходимость чтения большого объема данных Отсутствие необходимых индексов Scan

Причины PAGEIOLATCH_XX

Необходимость чтения большого объема данных
Отсутствие необходимых индексов
Scan вместо seek’a
Неоптимальные

планы
Медленная дисковая подсистема
Недостаточный объем оперативной памяти
Плохо, если занимает большую часть времени запроса.
Слайд 20

DEMO: PAGEIOLATCH_XX

DEMO: PAGEIOLATCH_XX

Слайд 21

CXPACKET sp_configure max degree of parallelism cost threshold for parallelism option(MAXDOP

CXPACKET

sp_configure
max degree of parallelism
cost threshold for parallelism
option(MAXDOP N)
Плохо, когда один из

потоков «отстает»
Слайд 22

DEMO: CXPACKET

DEMO: CXPACKET

Слайд 23

PAGELATCH_XX TempDB Create table #... Create table #... Create table #...

PAGELATCH_XX

TempDB

Create table #...

Create table #...

Create table #...

Create table #...

PFS

GAM

mdf

PFS

GAM

ndf

Слайд 24

PAGELATCH_XX Пользовательские базы Insert в таблицу с identity полем (hot page)

PAGELATCH_XX

Пользовательские базы
Insert в таблицу с identity полем (hot page)
Небольшая таблица-очередь
TempDB
Страницы

распределения данных
Table-Valued Functions (PFS)
Системный объекты
Слайд 25

WRITELOG RUN QUERY Insert into Sales.SalesOrderHeader… mdf ldf BUFFER Checkpoint (background) data Log records

WRITELOG

RUN QUERY

Insert into Sales.SalesOrderHeader…

mdf

ldf

BUFFER

Checkpoint
(background)

data
Log records

Слайд 26

DEMO: PAGELATCH_XX + WRITELOG

DEMO: PAGELATCH_XX + WRITELOG

Слайд 27

DEMO: LCK_M_*

DEMO: LCK_M_*

Слайд 28

DEMO: sp_AskBrent

DEMO: sp_AskBrent

Слайд 29

Спасибо! Blog: http://sql.dev.ms/ Twitter: @gr4mm Email: sql@dev.ms

Спасибо!

Blog: http://sql.dev.ms/
Twitter: @gr4mm
Email: sql@dev.ms