По большому счёту, вариантов почему запрос работает медленно всего два: или запрос сам по себе работает долго (CPU Time) или ждёт определённого ресурса (Wait Time). Все остальные причины медленной работы запросов являются производными этих двух вариантов. В ходе доклада мы научимся чётко определять, что является причиной долгой работы запроса, посмотрим чего может запрос ждать и как можно его ускорить
.NET Fest 2018. Денис Резник. Почему мой запрос тормозит и как это исправить
1. Why my query is slow and how to fix this
t WITH PASSION TO TECHNOLOGY
Denis Reznik
.NET CONFERENCE #1 IN UKRAINE, KYIV 2018
2. t .NET LEVEL UP
KYIV 2018
About Me
• Denis Reznik
• Kyiv, Ukraine
• Data Architect at Intapp, Inc.
• Microsoft Data Platform MVP
• Co-Founder of Ukrainian Data Community Kyiv
• PASS Regional Mentor, CEE
• Co-author of “SQL Server MVP Deep Dives 2”
3. t .NET LEVEL UP
KYIV 2018
Agenda
• Query Execution Time
• Slow Queries
• Optimization Algorithm
• First-Level Root Cause(s)
• Second-Level Root Cause(s)
• Query/Server/Database/Application Optimization
4. t .NET LEVEL UP
KYIV 2018
Query Execution Time
Duration (Elapsed Time)
CPU (CPU Time) Wait (Wait Time)
10. LCK_M_* Waits
0
SchedulersRunnable Queue
1
2 1
Suspended Queue
2
SELECT * FROM Users
WHERE Name LIKE 'K%'
UPDATE Users
SET Name = 'Jesse Pinkman'
WHERE Id = 3
Id Name
1 John Snow
2 Peter Partner
3 Kirill Nenahov
4 Jane Dow
1
Users
2
3
2
Id Name
1 John Snow
2 Peter Partner
3 Jesse Pinkman
4 Jane Dow
LCK_M_X
LCK_M_X
2
X S
12. ASYNC_NETWORK_IO Wait
0
SchedulersRunnable Queue
1
2
3
1
Suspended Queue
1
SELECT * FROM Users1
1
ASYNC_NETWORK_IO
ASYNC_NETWORK_IO
1
Client
Id Name
1 John Snow
2 Darth Vader
3 Peter Parker
4 Andriy Yarmolenko
Users
var command = new SqlCommand("SELECT * FROM Users", connection);
connection.Open();
var reader = command.ExecuteReader();
while (reader.Read())
{
// Do some logic (e.g. Thread.Sleep(1000); )
}