Полезные TreeMap визуализации для MSSQL, Postgres и MySQL

Я очень люблю визуализации. Человек лучше всего воспринимает информацию через образы. Для трех часто встречающихся баз (MSSQL, Postgres и MySQL) я смастерил плагины к проекту Bell, хотя этот код на Python можно использовать и отдельно. Поэтому для каждой визуализации я буду в скобочках писать имя файла из репозитория GitHub — вы можете этот файл вытащить и использовать его отдельно от проекта (для этого нудны минимальные модификации).

Отмечу только, что я считаю себя экспертом только в MSSQL, а то что сделал с другими базами — сделал по наитию. Кроме того, в отличие от MSSQL у меня нет реальных баз под большой нагрузкой для Postgres и MySQL. Поэтому ошибки/пожелания для скриптов Postgres и MySQL очень и очень welcome!

В основном я задействовал TreeMap

Размеры таблиц, индексов и баз

MSSQL

Мы моем построить TreeMap для всех таблиц сервера во всех базах (MSSQLsrvtreemap.py), так и в отдельной базе (MSSQLdbtreemap.py). В первом случае у нас возникают уровни: база — схема — таблица — индекс, а во втором схема — таблица — индекc, то есть на один уровень меньше. По хорошему можно добавить еще один уровень — разделы, это нужно кому-нибудь?

На реальном сервере в PROD это выглядит так:

2fbffb9390ebf22a464330672050ba74.png

Разумеется, имена таблиц я заменил. Цвета означают:

  • Зеленый — clustered indexes

  • Синий — nonclustered indexes

  • Красный привлекает внимание к HEAP tables.

  • Желтый — COLUMNSTORE indexes

  • Magenta — все остальные типы индексов — xml, spatial etc.

Также можно построить TreeMap для отображения дисков и расположения файлов на них (MSSQLdrvtreemap.py):

cbf488da62b77c90e2a88159a8ea4db2.png

Опять таки, данные с боевого сервера и мне пришлось заменить названия баз (кроме системных) на номера. В правом нижнем углу вы видите диск T: и файлы tempdb, отмеченные красным. Кстати, это не tempdb маленькая, это остальные базы огромные.

Первый файл (mdf) показывается зеленым, остальные файлы данных (часто там индексы) — желтым, файлы лога — цвет magenta (убеждаемся, что они собраны на диске L:) и, наконец, свободное место показано синим. Скрипт не видит размера обычных файлов (не баз), так как я не могу рассчитывать на то, что процедура xp_cmdshell разрешена, это может немного искажать статистику (особенно на C:).

Postgres

Для Postgres данные также доступны как для всего сервера (уровни база — схема — таблица — индекс — PGsrvtreemap.py), так и для конкретной базы (уровни схема — таблица — индекс — PGdbtreemap.py).

17e0fe97e9d37051434ea1cb72467d36.png

Собственно таблица показывается зеленым, а индексы — желтым (есть что нибудь еще и возможно нужны еще цвета?)

MySQL

Для него также доступны данные как по всему серверу (MySQLsrvtreemap.py), так и по каждой базе отдельно (MySQLdbtreemap.py). Однако я рассматривал только файлы InnoDb. Возможно то же самое можно делать и для других типов файлов (а часто надо?) и показывать их другими цветами.

ad2d582ee6ffe6486efce4888dc77326.png

Сама таблица показывается как »PRIMARY», зеленым, а индексы — желтым.

Интенсивность ввода — вывода

MSSQL

Используя статистику, накопленную функцией sys.fn_virtualfilestats, мы можем построить TreeMap диаграммы для интенсивности ввода и вывода:

e0b109c2ac6a83c128eac07cd8dbae18.png

Здесь два уровня — диск и файл, но на домашнем компьютере у меня есть только диск C: Цвета условны. Диаграмма для Writes строится аналогично. Файл MSSQLiotreemap.py

Postgre

В отличие от MSSQL, Postgres позволяет показать hits потаблично, при этом для каждой таблицы доступен отдельно cache hits:

6c0b72d6970dbb55f870b1052facd0df.png

Доступно для сервера и для отдельной базы. Непрерывное цветовое пространство показывает cache hits ratio. Размер фигур соответствует количеству обращений, включая кешированные. Файл PGtableio.py

MySQL

Для InnoDB файлов я нашел ввод и вывод для каждого файла, что дает две диаграммы — одну для ввода, другую для вывода, но выглядят они похоже (MySQLiotreemap.py):

13ea292d667d36c7d0c16d44f2e67242.png

Job history.

Этот плагин существует только для MSSQL. Я дам картинку, а потом объясню, что происходит (MSSQLjobsview.py):

75d99832f0169eb5ca7fe536b0c714c0.png

Опять таки, вместо имен jobs мне пришлось вывести их GUIDs. Что мы видим?

По горизонтали (ось X) у нас отложены сутки (смотрите внизу — от 0h до 24h). Для top 20 jobs, которые занимают больше всего времени в сутки, рисуем время их последнего выполнения. Если в джобе несколько шагов, то рисуем их разным цветом в палитре зеленый-голубой. А вот красная черточка вверху показывает, что выполнение шага закончилось ошибкой.

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

© Habrahabr.ru