SlideShare una empresa de Scribd logo
1 de 59
Подход
Доктора Хауса к
тестированию
оптимизации
запросов
(пятая серия)
Автор: Михалев Сергей
f1incode.com
Это я 
Team Lead / Software
Developer in VIAcode
www.linkedin.com/in/ssmikhalev
vk.com/ssmikhalev
ssmikhalev@gmail.com
f1incode.com
У вас есть отличная команда
Но не докторов, а программистов,
которые занимаются оптимизацией
вашего приложения.
Воскресенье
Только они думают:
“Какого черта стакан
в два раза
больше, чем нужно!”

Все-таки
тестировщики
особенные
люди.
Почему?!
Я думаю, из
меня выйдет
хороший
тестировщик.
Я
замечательно
умею всё
ломать!
Лучше
занимайся
своим
делом!
Понедельник: на этой неделе я буду
тестировщиком
Понедельник
На этой недели я
буду
тестировщиком!
Понедельник
Понедельник Ладно, разбирайт
есь сами. Вот вам
новый кейс!
И постарайтесь
сделать
так, чтобы Хаус
ничего не нашел!
Анализ кейса: дифференциальный
анализ
У нас серьезно
замедлилась
страница
диагнозов.
Возможно, д
ело в
функции
list_diagnosis
Понедельник: подготовка к тестированию
Нужна серьезная подготовка к тестированию
производительности …
Обработка запросов
Запрос
1. Разбирает запрос
2. Оценивает окружение
3. Анализирует
распределение данных
4. Строит эффективный
план запроса
5. Выполняет запрос
Данные
Вывод: оптимизация очень сильно зависит от
конкретных условий выполнения.
Подготовка к тестированию
производительности запросов
Цель – быть как можно “ближе” к реальному
окружению.
Необходимо:
1. Проконтролировать одинаковость
тестового и реального окружений.
2. Сверить совпадение схем баз данных.
3. Собрать достаточное количество реальных
запросов.
4. Подготовить процесс запуска запросов и
сбора метрик.
Подготовка: 1 - тестовое окружение
Необходимо проверить:
1. Что тестовый сервер как можно ближе к
“реальному”: CPU, жесткий диск, RAID-
ы, оперативная память.
2. Совпадение операционных
систем, обновлений.
3. Настройки СУБД: версия, сколько памяти
выделено, на какие диски смонтированы базы, collation-
ы.
Подготовка: 2 - база данных
1. Проверить совпадение схем баз данных:
одинаковость
индексов, функций, статистики, collation.
2. Данные должны быть близкие к реальным.
Нет никакого смысла тестировать производительность
запросов на тестовых (смоделированных) данных.
Подготовка: 3 - запросы
Запрос
Запрос
1. Необходимо использовать только запросы
от реальных пользователей.
2. Количество запросов должно быть
достаточным.
Подготовка: 4 - процесс запуска
Цель - получать контролируемые результаты
для их дальнейшего анализа.
Необходимо создавать как можно более
стабильную из теста в тест нагрузку. Поэтому
важно контролировать:
1. Порядок запуска запросов (иначе возможны
серьезные расхождения в результатах из-за
разных закешированных планов запроса).
2. Создаваемую нагрузку (количество
параллельно запускаемых запросов).
Выводы
1. Обязательно контролировать, что тестируемые
сервера обладают сравнимой с продакшеном
производительностью.
2. Нет большого смысла тестировать
оптимизацию на смоделированных данных.
3. Необходимо стремиться воспроизводить как
можно более похожую на реальную нагрузку.
4. Если вы проигнорировали или не обеспечили
хотя бы один из подготовительных шагов –
вашим тестам нельзя доверять.
Вечер понедельника
Всё ли я
предусмотрел?
Всё ли
подготовил?
Вторник
Мы
исправили
кейс!!
Стало
быстрее в
10раз!!
Реакция Хауса
Особенно программисты 
Поэтому ВСЁ нужно перепроверять.
Экспресс анализ изменений
Старая функция Новая функция
Запускаем
тестовые трейсы
запросов
Анализ результатов: метрики
1. Время выполнения запроса.
2. Количество логических чтений.
3. Время СУБД на обработку запроса.
4. Количество памяти, выделенное на
обработку запроса.
Анализ результатов
Анализ результатов: распределение
по времени выполнения.
Главный пик сместился, т.е
большинство запросов
стало быстрее.
Но появился новый
пик, которого раньше не
Возвращаем кейс
Выводы
1. Практически невозможно оптимизировать
запрос так, чтобы не замедлить что-то
другое.
2. Обычно нет проблем оптимизировать один
проблемный запрос. Наибольшая сложность
- оптимизировать весь набор запросов.
3. Поэтому - чем более универсальный
запрос, тем он медленнее!
4. Это первый из “балансов”. Можно
оптимизировать какой-то конкретный
запрос за счет других.
Вечер вторника
Среда
Идет активная работа.
И только
тестировщик
Хаус в это время …
Среда
Команда находит и представляет
новое решение.
Экспресс анализ изменений
Старая функция Новая функция
Куда исчезла логика?
Экспресс анализ изменений
create view dbo.v_diagnosis_clustered
with schemabinding as
select g.diagnosis_id, g.patient_id,
g.desease_name, g.create_time,
d.doctor_id, d.hospital_id, d.doctor_name
from DIAGNOSIS g
inner join DOCTOR d
on g.doctor_id = d.doctor_id
select …
from PATIENT p
cross apply
(
select top 1 desease_name, doctor_name
from V_DIAGNOSIS_CLUSTERED g
where g.patient_id = p.patient_id
and g.hospital_id = @hospital_id
order by g.create_time
) d
select …
from PATIENT p
cross apply
(
select top 1 desease_name, doctor_name
from DIAGNOSIS g
inner join DOCTOR d
on g.doctor_id = d.doctor_id
where g.patient_id = p.patient_id
and d.hospital_id = @hospital_id
order by g.create_time
) d
create unique clustered index clustered_index
on dbo.v_diagnosis_clustered
(hospital_id, patient_id)
Старая версия Новая версия
View vs Indexed View
1. Виртуальная
(логическая)
таблица, представляюща
я собой поименованный
запрос.
2. Физически данные не
хранятся. SELECT
вычисляется каждый
раз, когда к нему
обращаются.
View Indexed View
1. Представление, на
котором создан
кластерный индекс.
2. Физически данные
хранятся, как и в
обычной таблице.
Баланс скорости чтения и скорости
модификаций
1. Кластерное представление будет
пересчитываться при каждой модификации
исходных таблиц.
2. Модификация станет медленнее, а
чтение, скорее всего, быстрее.
3. Баланс №2 – оптимизация скорости чтения
за счет скорости модификаций или
наоборот.
Анализ результатов: чтений
Анализ результатов: модификаций
Анализ результатов
Выносить
или нет …
Еще разок …
Намного
лучше. А
можно сделать
еще лучше?
Выводы
1. Наиболее важный баланс в оптимизации
запросов – это баланс скорости чтений и
скорости модификаций.
2. Практически всегда можно ускорить
чтения, замедлив соответствующие
изменения данных.
3. Принимать решения о приемлемости такой
оптимизации необходимо, основываясь на
знаниях о приложении.
Четверг
Опять идет активная работа
Четверг
Новое решение …
Экспресс анализ изменений
Старая функция Новая функция
Они
одинаковые!!!
Значит, измен
илась схема
базы!!!
Индексы?!
Индексы: куча
extent
IndexAllocationMap
extent
extent
create table DOCTOR
(
doctor_id int identity(1,1) not null,
hospital_id int not null,
first_name nvarchar(50) not null,
last_name nvarchar(50) not null,
create_time datetime not null
)
Так как нет кластерного
индекса, очевидно, что
данные в куче
неупорядоченные.
Table Scan
Table Scan
Table Scan
Индексы: кластерный индекс
ALTER TABLE DOCTOR
ADD CONSTRAINT PK_DOCTOR
PRIMARY KEY CLUSTERED
(
doctor_id asc
)
Data Rows
264 …
… …
312 …
Data Rows
210 …
… …
263 …
Data Rows
157 …
… …
209 …
Data Rows
104 …
… …
156 …
Data Rows
53 …
… …
103 …
Data Rows
1 …
… …
52 …
Index Rows
157
210
264
Index Rows
1
53
104
Index Rows
1
157
Root
Intermediate Level
Leaf / Data Level
На листовых уровнях хранятся
значения всех столбцов
Определяет физический порядок
даных, поэтому может быть
создан только однин кластерный
индекс на таблице
Все индексы
организованы
как B-Tree
CREATE NONCLUSTERED INDEX IX_HOSPITAL
ON DOCTOR
(
hospital_id
)
Data Rows
264 …
… …
312 …
Data Rows
210 …
… …
263 …
Data Rows
157 …
… …
209 …
Data Rows
104 …
… …
156 …
Data Rows
53 …
… …
103 …
Data Rows
1 …
… …
52 …
Root
Intermediate
Level
Leaf Level
Index Rows
1
25
Index Rows
51
75
Index Rows
1
51
Index Rows
1
…
24
1
...
104
Index Rows
25
…
50
100
...
209
Index Rows
51
…
74
106
...
202
Index Rows
75
…
83
264
...
210
ClusteredIndex
Тоже организован как B-Tree
Не задает физический
порядок хранения данных
в таблице, а сортирует
данные в каком-то порядке
Содержит копии
данных из таблицы
На листовом уровне
содержатся ссылки на
кластерный индекс
Индексы: некластерный индекс
Представляйте себе книгу
Кластерный
индекс – это
номера
страниц в
книге.
Некластерный
индекс – это
предметный
указатель.
Анализ результатов: добавление
индексов
Анализ результатов: добавление
индексов - модификация
Выводы
1. Изменения индексов – наиболее
популярный и простой способ
оптимизации.
2. Индексы, как и кластерные
представления, замедляют операции
модификации.
3. Обычно функциональное тестирование
не требуется.
Пятница
Совместный анализ всех
результатов
Анализ результатов
Выросший
максимум
Скорость функции
Скорость модификаций
Выносим изменения
Выводы
1. Для любой задачи существует несколько
путей и подходов оптимизации.
2. Оптимизация запросов – это всегда
вопрос баланса, поэтому задача
тестирования - правильно выявить этот
баланс.
3. Выбор того или иного решения всегда
зависит от специфики приложения.
Выводы недели
1. Подготовка к тестированию – самый
важный этап. Если вы проигнорировали хотя
бы один из подготовительных шагов – вашим
тестам нельзя доверять.
2. Оптимизация – это вопрос баланса:
• оптимизация какого-то конкретного
запроса за счет других;
• оптимизация чтений за счет
модификаций;
3. Поэтому почти всегда можно найти, что в
действительности стало медленнее.
Молодцы!!!
Помощь
Командная работа или тестировщиков
нужно всегда поддерживать!!!
Подводим итоги недели
1) Разобрались с операциями над
множествами, такими как except и
union. И даже реализовали except all.
2) Мы разработали метод
функционального тестирования
запросов.
3) Нашли очень замысловатую
логическую ошибку и исправили
старый функциональный баг.
Подход Доктора Хауса к тестированию
оптимизации запросов
1. Разбираться в
проблеме до конца.
2. Быть одной
командой.
3. Все врут, а значит -
всё нужно
перепроверять.
4. Не бояться резать по
живому, но всегда
контролировать.
5. Не сдаваться!!!
Вопросы?
Team Lead / Software
Developer in VIAcode
www.linkedin.com/in/ssmikhalev
vk.com/ssmikhalev
ssmikhalev@gmail.com
f1incode.com

Más contenido relacionado

Destacado

Невыносимая переносимость кроссплатформенных приложений на примере десктопных...
Невыносимая переносимость кроссплатформенных приложений на примере десктопных...Невыносимая переносимость кроссплатформенных приложений на примере десктопных...
Невыносимая переносимость кроссплатформенных приложений на примере десктопных...SQALab
 
Обеспечение качества: Практические советы
Обеспечение качества: Практические советыОбеспечение качества: Практические советы
Обеспечение качества: Практические советыSQALab
 
Успешный тестировщик. Путь профессионала
Успешный тестировщик. Путь профессионалаУспешный тестировщик. Путь профессионала
Успешный тестировщик. Путь профессионалаSQALab
 
Инструменты тестирования, или хочешь сделать хорошо - сделай это сам
Инструменты тестирования, или хочешь сделать хорошо - сделай это самИнструменты тестирования, или хочешь сделать хорошо - сделай это сам
Инструменты тестирования, или хочешь сделать хорошо - сделай это самSQALab
 
Безопасность сессий в веб-приложениях: практическое применение
Безопасность сессий в веб-приложениях: практическое применениеБезопасность сессий в веб-приложениях: практическое применение
Безопасность сессий в веб-приложениях: практическое применениеSQALab
 
Практические аспекты организации процесса тестирования в государственных учре...
Практические аспекты организации процесса тестирования в государственных учре...Практические аспекты организации процесса тестирования в государственных учре...
Практические аспекты организации процесса тестирования в государственных учре...SQALab
 
Практически о виртуализации сервисов
Практически о виртуализации сервисовПрактически о виртуализации сервисов
Практически о виртуализации сервисовSQALab
 
Как общаться с коллегами удалённо, чтобы не было мучительно больно?
Как общаться с коллегами удалённо, чтобы не было мучительно больно?Как общаться с коллегами удалённо, чтобы не было мучительно больно?
Как общаться с коллегами удалённо, чтобы не было мучительно больно?SQALab
 
Полная автоматизация развертываний ПО: общие концепции, пример реализации, ср...
Полная автоматизация развертываний ПО: общие концепции, пример реализации, ср...Полная автоматизация развертываний ПО: общие концепции, пример реализации, ср...
Полная автоматизация развертываний ПО: общие концепции, пример реализации, ср...SQALab
 
Тестирование в опенсорс
Тестирование в опенсорсТестирование в опенсорс
Тестирование в опенсорсSQALab
 
Тестовая инфраструктура в облаке
Тестовая инфраструктура в облакеТестовая инфраструктура в облаке
Тестовая инфраструктура в облакеSQALab
 
Теория и практика сокращения релизного цикла
Теория и практика сокращения релизного циклаТеория и практика сокращения релизного цикла
Теория и практика сокращения релизного циклаSQALab
 
VIQA - Тестирование UI с помощью Виртуального интеллекта
VIQA - Тестирование UI с помощью Виртуального интеллектаVIQA - Тестирование UI с помощью Виртуального интеллекта
VIQA - Тестирование UI с помощью Виртуального интеллектаSQALab
 
Автоматизированное тестирование не-тестировщиками
Автоматизированное тестирование не-тестировщикамиАвтоматизированное тестирование не-тестировщиками
Автоматизированное тестирование не-тестировщикамиSQALab
 
Особенности тестирования облачных сервисов
Особенности тестирования облачных сервисовОсобенности тестирования облачных сервисов
Особенности тестирования облачных сервисовSQALab
 
Миссия тест-менеджера
Миссия тест-менеджераМиссия тест-менеджера
Миссия тест-менеджераSQALab
 
Организация времени в тестировании
Организация времени в тестированииОрганизация времени в тестировании
Организация времени в тестированииSQALab
 
Первоклассное тестирование
Первоклассное тестированиеПервоклассное тестирование
Первоклассное тестированиеSQALab
 
Waterfall revisited: практические метрики тестирования
Waterfall revisited: практические метрики тестированияWaterfall revisited: практические метрики тестирования
Waterfall revisited: практические метрики тестированияSQALab
 
Тест-дизайн: проще читать или проще писать
Тест-дизайн: проще читать или проще писатьТест-дизайн: проще читать или проще писать
Тест-дизайн: проще читать или проще писатьSQALab
 

Destacado (20)

Невыносимая переносимость кроссплатформенных приложений на примере десктопных...
Невыносимая переносимость кроссплатформенных приложений на примере десктопных...Невыносимая переносимость кроссплатформенных приложений на примере десктопных...
Невыносимая переносимость кроссплатформенных приложений на примере десктопных...
 
Обеспечение качества: Практические советы
Обеспечение качества: Практические советыОбеспечение качества: Практические советы
Обеспечение качества: Практические советы
 
Успешный тестировщик. Путь профессионала
Успешный тестировщик. Путь профессионалаУспешный тестировщик. Путь профессионала
Успешный тестировщик. Путь профессионала
 
Инструменты тестирования, или хочешь сделать хорошо - сделай это сам
Инструменты тестирования, или хочешь сделать хорошо - сделай это самИнструменты тестирования, или хочешь сделать хорошо - сделай это сам
Инструменты тестирования, или хочешь сделать хорошо - сделай это сам
 
Безопасность сессий в веб-приложениях: практическое применение
Безопасность сессий в веб-приложениях: практическое применениеБезопасность сессий в веб-приложениях: практическое применение
Безопасность сессий в веб-приложениях: практическое применение
 
Практические аспекты организации процесса тестирования в государственных учре...
Практические аспекты организации процесса тестирования в государственных учре...Практические аспекты организации процесса тестирования в государственных учре...
Практические аспекты организации процесса тестирования в государственных учре...
 
Практически о виртуализации сервисов
Практически о виртуализации сервисовПрактически о виртуализации сервисов
Практически о виртуализации сервисов
 
Как общаться с коллегами удалённо, чтобы не было мучительно больно?
Как общаться с коллегами удалённо, чтобы не было мучительно больно?Как общаться с коллегами удалённо, чтобы не было мучительно больно?
Как общаться с коллегами удалённо, чтобы не было мучительно больно?
 
Полная автоматизация развертываний ПО: общие концепции, пример реализации, ср...
Полная автоматизация развертываний ПО: общие концепции, пример реализации, ср...Полная автоматизация развертываний ПО: общие концепции, пример реализации, ср...
Полная автоматизация развертываний ПО: общие концепции, пример реализации, ср...
 
Тестирование в опенсорс
Тестирование в опенсорсТестирование в опенсорс
Тестирование в опенсорс
 
Тестовая инфраструктура в облаке
Тестовая инфраструктура в облакеТестовая инфраструктура в облаке
Тестовая инфраструктура в облаке
 
Теория и практика сокращения релизного цикла
Теория и практика сокращения релизного циклаТеория и практика сокращения релизного цикла
Теория и практика сокращения релизного цикла
 
VIQA - Тестирование UI с помощью Виртуального интеллекта
VIQA - Тестирование UI с помощью Виртуального интеллектаVIQA - Тестирование UI с помощью Виртуального интеллекта
VIQA - Тестирование UI с помощью Виртуального интеллекта
 
Автоматизированное тестирование не-тестировщиками
Автоматизированное тестирование не-тестировщикамиАвтоматизированное тестирование не-тестировщиками
Автоматизированное тестирование не-тестировщиками
 
Особенности тестирования облачных сервисов
Особенности тестирования облачных сервисовОсобенности тестирования облачных сервисов
Особенности тестирования облачных сервисов
 
Миссия тест-менеджера
Миссия тест-менеджераМиссия тест-менеджера
Миссия тест-менеджера
 
Организация времени в тестировании
Организация времени в тестированииОрганизация времени в тестировании
Организация времени в тестировании
 
Первоклассное тестирование
Первоклассное тестированиеПервоклассное тестирование
Первоклассное тестирование
 
Waterfall revisited: практические метрики тестирования
Waterfall revisited: практические метрики тестированияWaterfall revisited: практические метрики тестирования
Waterfall revisited: практические метрики тестирования
 
Тест-дизайн: проще читать или проще писать
Тест-дизайн: проще читать или проще писатьТест-дизайн: проще читать или проще писать
Тест-дизайн: проще читать или проще писать
 

Similar a Подход доктора Хауса в тестировании оптимизации запросов (5 серия)

"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)SPB SQA Group
 
Тест-план и исследовательское тестирование
Тест-план и исследовательское тестированиеТест-план и исследовательское тестирование
Тест-план и исследовательское тестированиеVasiliy Burov
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3Computer Science Club
 
Автотестирование АБС. Конвейер разработки, конвейер данных, конвейер выполнения
Автотестирование АБС. Конвейер разработки, конвейер данных, конвейер выполненияАвтотестирование АБС. Конвейер разработки, конвейер данных, конвейер выполнения
Автотестирование АБС. Конвейер разработки, конвейер данных, конвейер выполненияSQALab
 
Лекция 11. Тестирование.
Лекция 11. Тестирование.Лекция 11. Тестирование.
Лекция 11. Тестирование.Roman Brovko
 
Собеседование на позицию Java Developer
Собеседование на позицию Java DeveloperСобеседование на позицию Java Developer
Собеседование на позицию Java DeveloperOlexandra Dmytrenko
 
организация и проведение тестирования
организация и проведение тестированияорганизация и проведение тестирования
организация и проведение тестированияIgor Pozumentov
 
Тестирование на последнем рубеже
Тестирование на последнем рубежеТестирование на последнем рубеже
Тестирование на последнем рубежеSQALab
 
Innodb Scalability And New Features Hl2008 Rus
Innodb Scalability And New Features Hl2008 RusInnodb Scalability And New Features Hl2008 Rus
Innodb Scalability And New Features Hl2008 RusOntico
 
Эффективные ретроспективы
Эффективные ретроспективыЭффективные ретроспективы
Эффективные ретроспективыBoris Volfson
 
средства оценки производительности
средства оценки производительностисредства оценки производительности
средства оценки производительностиHelen Kopteva
 
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareМониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareMarina Gryshko
 
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareМониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareBAKOTECH
 
SQA Days 10: Фишки просветлённых тест-менеджеров
SQA Days 10: Фишки просветлённых тест-менеджеровSQA Days 10: Фишки просветлённых тест-менеджеров
SQA Days 10: Фишки просветлённых тест-менеджеровNatalya Rukol
 
Полезные "фишки" для построения успешного процесса тестирования
Полезные "фишки" для построения успешного процесса тестированияПолезные "фишки" для построения успешного процесса тестирования
Полезные "фишки" для построения успешного процесса тестированияSQALab
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииCEE-SEC(R)
 
CodeFest 2010. Емелина Т. — Trial-and-error: как мы начинали тестировать
CodeFest 2010. Емелина Т. — Trial-and-error: как мы начинали тестироватьCodeFest 2010. Емелина Т. — Trial-and-error: как мы начинали тестировать
CodeFest 2010. Емелина Т. — Trial-and-error: как мы начинали тестироватьCodeFest
 

Similar a Подход доктора Хауса в тестировании оптимизации запросов (5 серия) (20)

"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
 
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Как работать с legacy проектом, которому больше10 лет? |Денис ВоскобойникКак работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
 
Тест-план и исследовательское тестирование
Тест-план и исследовательское тестированиеТест-план и исследовательское тестирование
Тест-план и исследовательское тестирование
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3
 
Автотестирование АБС. Конвейер разработки, конвейер данных, конвейер выполнения
Автотестирование АБС. Конвейер разработки, конвейер данных, конвейер выполненияАвтотестирование АБС. Конвейер разработки, конвейер данных, конвейер выполнения
Автотестирование АБС. Конвейер разработки, конвейер данных, конвейер выполнения
 
Лекция 11. Тестирование.
Лекция 11. Тестирование.Лекция 11. Тестирование.
Лекция 11. Тестирование.
 
Собеседование на позицию Java Developer
Собеседование на позицию Java DeveloperСобеседование на позицию Java Developer
Собеседование на позицию Java Developer
 
организация и проведение тестирования
организация и проведение тестированияорганизация и проведение тестирования
организация и проведение тестирования
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Тестирование на последнем рубеже
Тестирование на последнем рубежеТестирование на последнем рубеже
Тестирование на последнем рубеже
 
Word
WordWord
Word
 
Innodb Scalability And New Features Hl2008 Rus
Innodb Scalability And New Features Hl2008 RusInnodb Scalability And New Features Hl2008 Rus
Innodb Scalability And New Features Hl2008 Rus
 
Эффективные ретроспективы
Эффективные ретроспективыЭффективные ретроспективы
Эффективные ретроспективы
 
средства оценки производительности
средства оценки производительностисредства оценки производительности
средства оценки производительности
 
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareМониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
 
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareМониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
 
SQA Days 10: Фишки просветлённых тест-менеджеров
SQA Days 10: Фишки просветлённых тест-менеджеровSQA Days 10: Фишки просветлённых тест-менеджеров
SQA Days 10: Фишки просветлённых тест-менеджеров
 
Полезные "фишки" для построения успешного процесса тестирования
Полезные "фишки" для построения успешного процесса тестированияПолезные "фишки" для построения успешного процесса тестирования
Полезные "фишки" для построения успешного процесса тестирования
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
 
CodeFest 2010. Емелина Т. — Trial-and-error: как мы начинали тестировать
CodeFest 2010. Емелина Т. — Trial-and-error: как мы начинали тестироватьCodeFest 2010. Емелина Т. — Trial-and-error: как мы начинали тестировать
CodeFest 2010. Емелина Т. — Trial-and-error: как мы начинали тестировать
 

Más de SQALab

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировкуSQALab
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаSQALab
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиSQALab
 
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияSQALab
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...SQALab
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testingSQALab
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженSQALab
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииSQALab
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовSQALab
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовSQALab
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsSQALab
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеSQALab
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииSQALab
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеSQALab
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестированиеSQALab
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"SQALab
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовSQALab
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных системSQALab
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросSQALab
 
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...SQALab
 

Más de SQALab (20)

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировку
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщика
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержки
 
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testing
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нужен
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихии
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советов
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестов
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIs
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджменте
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестирование
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектов
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных систем
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопрос
 
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
 

Подход доктора Хауса в тестировании оптимизации запросов (5 серия)

  • 2. Это я  Team Lead / Software Developer in VIAcode www.linkedin.com/in/ssmikhalev vk.com/ssmikhalev ssmikhalev@gmail.com f1incode.com
  • 3. У вас есть отличная команда Но не докторов, а программистов, которые занимаются оптимизацией вашего приложения.
  • 4. Воскресенье Только они думают: “Какого черта стакан в два раза больше, чем нужно!”  Все-таки тестировщики особенные люди. Почему?!
  • 5. Я думаю, из меня выйдет хороший тестировщик. Я замечательно умею всё ломать! Лучше занимайся своим делом!
  • 6. Понедельник: на этой неделе я буду тестировщиком
  • 7. Понедельник На этой недели я буду тестировщиком! Понедельник
  • 8. Понедельник Ладно, разбирайт есь сами. Вот вам новый кейс! И постарайтесь сделать так, чтобы Хаус ничего не нашел!
  • 9. Анализ кейса: дифференциальный анализ У нас серьезно замедлилась страница диагнозов. Возможно, д ело в функции list_diagnosis
  • 10. Понедельник: подготовка к тестированию Нужна серьезная подготовка к тестированию производительности …
  • 11. Обработка запросов Запрос 1. Разбирает запрос 2. Оценивает окружение 3. Анализирует распределение данных 4. Строит эффективный план запроса 5. Выполняет запрос Данные Вывод: оптимизация очень сильно зависит от конкретных условий выполнения.
  • 12. Подготовка к тестированию производительности запросов Цель – быть как можно “ближе” к реальному окружению. Необходимо: 1. Проконтролировать одинаковость тестового и реального окружений. 2. Сверить совпадение схем баз данных. 3. Собрать достаточное количество реальных запросов. 4. Подготовить процесс запуска запросов и сбора метрик.
  • 13. Подготовка: 1 - тестовое окружение Необходимо проверить: 1. Что тестовый сервер как можно ближе к “реальному”: CPU, жесткий диск, RAID- ы, оперативная память. 2. Совпадение операционных систем, обновлений. 3. Настройки СУБД: версия, сколько памяти выделено, на какие диски смонтированы базы, collation- ы.
  • 14. Подготовка: 2 - база данных 1. Проверить совпадение схем баз данных: одинаковость индексов, функций, статистики, collation. 2. Данные должны быть близкие к реальным. Нет никакого смысла тестировать производительность запросов на тестовых (смоделированных) данных.
  • 15. Подготовка: 3 - запросы Запрос Запрос 1. Необходимо использовать только запросы от реальных пользователей. 2. Количество запросов должно быть достаточным.
  • 16. Подготовка: 4 - процесс запуска Цель - получать контролируемые результаты для их дальнейшего анализа. Необходимо создавать как можно более стабильную из теста в тест нагрузку. Поэтому важно контролировать: 1. Порядок запуска запросов (иначе возможны серьезные расхождения в результатах из-за разных закешированных планов запроса). 2. Создаваемую нагрузку (количество параллельно запускаемых запросов).
  • 17. Выводы 1. Обязательно контролировать, что тестируемые сервера обладают сравнимой с продакшеном производительностью. 2. Нет большого смысла тестировать оптимизацию на смоделированных данных. 3. Необходимо стремиться воспроизводить как можно более похожую на реальную нагрузку. 4. Если вы проигнорировали или не обеспечили хотя бы один из подготовительных шагов – вашим тестам нельзя доверять.
  • 18. Вечер понедельника Всё ли я предусмотрел? Всё ли подготовил?
  • 21. Особенно программисты  Поэтому ВСЁ нужно перепроверять.
  • 22. Экспресс анализ изменений Старая функция Новая функция
  • 24. Анализ результатов: метрики 1. Время выполнения запроса. 2. Количество логических чтений. 3. Время СУБД на обработку запроса. 4. Количество памяти, выделенное на обработку запроса.
  • 26. Анализ результатов: распределение по времени выполнения. Главный пик сместился, т.е большинство запросов стало быстрее. Но появился новый пик, которого раньше не
  • 28. Выводы 1. Практически невозможно оптимизировать запрос так, чтобы не замедлить что-то другое. 2. Обычно нет проблем оптимизировать один проблемный запрос. Наибольшая сложность - оптимизировать весь набор запросов. 3. Поэтому - чем более универсальный запрос, тем он медленнее! 4. Это первый из “балансов”. Можно оптимизировать какой-то конкретный запрос за счет других.
  • 30. Среда Идет активная работа. И только тестировщик Хаус в это время …
  • 31. Среда Команда находит и представляет новое решение.
  • 32. Экспресс анализ изменений Старая функция Новая функция Куда исчезла логика?
  • 33. Экспресс анализ изменений create view dbo.v_diagnosis_clustered with schemabinding as select g.diagnosis_id, g.patient_id, g.desease_name, g.create_time, d.doctor_id, d.hospital_id, d.doctor_name from DIAGNOSIS g inner join DOCTOR d on g.doctor_id = d.doctor_id select … from PATIENT p cross apply ( select top 1 desease_name, doctor_name from V_DIAGNOSIS_CLUSTERED g where g.patient_id = p.patient_id and g.hospital_id = @hospital_id order by g.create_time ) d select … from PATIENT p cross apply ( select top 1 desease_name, doctor_name from DIAGNOSIS g inner join DOCTOR d on g.doctor_id = d.doctor_id where g.patient_id = p.patient_id and d.hospital_id = @hospital_id order by g.create_time ) d create unique clustered index clustered_index on dbo.v_diagnosis_clustered (hospital_id, patient_id) Старая версия Новая версия
  • 34. View vs Indexed View 1. Виртуальная (логическая) таблица, представляюща я собой поименованный запрос. 2. Физически данные не хранятся. SELECT вычисляется каждый раз, когда к нему обращаются. View Indexed View 1. Представление, на котором создан кластерный индекс. 2. Физически данные хранятся, как и в обычной таблице.
  • 35. Баланс скорости чтения и скорости модификаций 1. Кластерное представление будет пересчитываться при каждой модификации исходных таблиц. 2. Модификация станет медленнее, а чтение, скорее всего, быстрее. 3. Баланс №2 – оптимизация скорости чтения за счет скорости модификаций или наоборот.
  • 39. Еще разок … Намного лучше. А можно сделать еще лучше?
  • 40. Выводы 1. Наиболее важный баланс в оптимизации запросов – это баланс скорости чтений и скорости модификаций. 2. Практически всегда можно ускорить чтения, замедлив соответствующие изменения данных. 3. Принимать решения о приемлемости такой оптимизации необходимо, основываясь на знаниях о приложении.
  • 43. Экспресс анализ изменений Старая функция Новая функция Они одинаковые!!! Значит, измен илась схема базы!!! Индексы?!
  • 44. Индексы: куча extent IndexAllocationMap extent extent create table DOCTOR ( doctor_id int identity(1,1) not null, hospital_id int not null, first_name nvarchar(50) not null, last_name nvarchar(50) not null, create_time datetime not null ) Так как нет кластерного индекса, очевидно, что данные в куче неупорядоченные. Table Scan Table Scan Table Scan
  • 45. Индексы: кластерный индекс ALTER TABLE DOCTOR ADD CONSTRAINT PK_DOCTOR PRIMARY KEY CLUSTERED ( doctor_id asc ) Data Rows 264 … … … 312 … Data Rows 210 … … … 263 … Data Rows 157 … … … 209 … Data Rows 104 … … … 156 … Data Rows 53 … … … 103 … Data Rows 1 … … … 52 … Index Rows 157 210 264 Index Rows 1 53 104 Index Rows 1 157 Root Intermediate Level Leaf / Data Level На листовых уровнях хранятся значения всех столбцов Определяет физический порядок даных, поэтому может быть создан только однин кластерный индекс на таблице Все индексы организованы как B-Tree
  • 46. CREATE NONCLUSTERED INDEX IX_HOSPITAL ON DOCTOR ( hospital_id ) Data Rows 264 … … … 312 … Data Rows 210 … … … 263 … Data Rows 157 … … … 209 … Data Rows 104 … … … 156 … Data Rows 53 … … … 103 … Data Rows 1 … … … 52 … Root Intermediate Level Leaf Level Index Rows 1 25 Index Rows 51 75 Index Rows 1 51 Index Rows 1 … 24 1 ... 104 Index Rows 25 … 50 100 ... 209 Index Rows 51 … 74 106 ... 202 Index Rows 75 … 83 264 ... 210 ClusteredIndex Тоже организован как B-Tree Не задает физический порядок хранения данных в таблице, а сортирует данные в каком-то порядке Содержит копии данных из таблицы На листовом уровне содержатся ссылки на кластерный индекс Индексы: некластерный индекс
  • 47. Представляйте себе книгу Кластерный индекс – это номера страниц в книге. Некластерный индекс – это предметный указатель.
  • 50. Выводы 1. Изменения индексов – наиболее популярный и простой способ оптимизации. 2. Индексы, как и кластерные представления, замедляют операции модификации. 3. Обычно функциональное тестирование не требуется.
  • 54. Выводы 1. Для любой задачи существует несколько путей и подходов оптимизации. 2. Оптимизация запросов – это всегда вопрос баланса, поэтому задача тестирования - правильно выявить этот баланс. 3. Выбор того или иного решения всегда зависит от специфики приложения.
  • 55. Выводы недели 1. Подготовка к тестированию – самый важный этап. Если вы проигнорировали хотя бы один из подготовительных шагов – вашим тестам нельзя доверять. 2. Оптимизация – это вопрос баланса: • оптимизация какого-то конкретного запроса за счет других; • оптимизация чтений за счет модификаций; 3. Поэтому почти всегда можно найти, что в действительности стало медленнее.
  • 57. Помощь Командная работа или тестировщиков нужно всегда поддерживать!!!
  • 58. Подводим итоги недели 1) Разобрались с операциями над множествами, такими как except и union. И даже реализовали except all. 2) Мы разработали метод функционального тестирования запросов. 3) Нашли очень замысловатую логическую ошибку и исправили старый функциональный баг. Подход Доктора Хауса к тестированию оптимизации запросов 1. Разбираться в проблеме до конца. 2. Быть одной командой. 3. Все врут, а значит - всё нужно перепроверять. 4. Не бояться резать по живому, но всегда контролировать. 5. Не сдаваться!!!
  • 59. Вопросы? Team Lead / Software Developer in VIAcode www.linkedin.com/in/ssmikhalev vk.com/ssmikhalev ssmikhalev@gmail.com f1incode.com