Оговорюсь сразу, что я не DBA. И я даже не напишу триггер без мануала. Однако мне посчастливилось приобрести неплохой опыт в разработке и оптимизации баз данных. Этим опытом я и хочу поделиться.
Я хочу привести простой список, который, я надеюсь, поможет вам выявить узкие места в работе с СУБД на ваших проектах. Все это мои личные наработки, поэтому на какую либо полноту, упорядоченность, уникальность и безоговорочность они претендовать не могут. Итак, начнем.
Структура БД
- Созданы ли домены для всех необходимых столбцов?
- Созданы ли все необходимые fk(foreign key)?
- Созданы ли индексы для fk указывающие на таблицы с большим объемом данных(в некоторых СУБД индексы создаются вместе с fk)?
- Правильный ли порядок полей в составных индексах?
- Есть ли таблицы где размер id(pk) поля(домена) занимает более 30% от объема строки(кортежа) и есть вторичный pk(primary key)?
- Можно ли заменить триггеры на fk?
Работа с СУБД
- Используете ли вы Connection pool?
- Используете ли вы серверные курсоры?
- Используете ли вы read-only транзакции и курсоры где возможно? Однонаправленные курсоры?
- Используете ли вы параметризированные и подготовленные запросы (особенно при многократной вставке информации)?
- Используете ли вы явное управление транзакциями?
- Минимизирована ли длина транзакции?
- Есть ли очень длинные или объемные транзакции, которые можно разбить на несколько?
- Есть ли у вас после IUD запросов select в той же транзакции?
- Выставлен ли таймаут для запроса?
- выставлен ли минимально возможный Isolation Level? Меняете ли вы его в зависимости от нужд транзакции?
- Знаете ли вы что, когда и на сколько блокируется на запись? А на чтение?
- Блокируются ли любая ваша таблица более чем на секунду?
- Знаете ли вы TOP 5 запросов в вашей системе по кол-ву вызовов? А по времени выполнения?
- Можно ли часть часто используемой информации закэшировать?
- Есть ли у вас выборки, которые по условию возвращают более 30% данных из таблицы?
- Есть ли у вас выборки, которые возвращают информации в 2 раза больше чем необходимо?
- Есть ли запросы, которые сканируют всю таблицу не по ключу(natural scan)?
Вот вкратце и все что вспомнилось. Почти обо все вопросы я в свое время спотыкался. Практически каждый может выиграть вам кучу времени у сервера без всяких хитрых махинаций и подстроек СУБД и БД в частности.
Не обвиняйте во всех проблемах других – попробуйте сначала найти их в себе.
P.S. Если причина упоминания какого-либо пункта не ясна - спрашивайте.
Читайте также
Group-IB: в мире почти 400 тысяч незащищенных баз данных, больше всего серверов — в США
Group-IB: в мире почти 400 тысяч незащищенных баз данных, больше всего серверов — в США
«Яндекс» открыл исходники системы управления базами данных YDB
«Яндекс» открыл исходники системы управления базами данных YDB
Силовикам разрешат получать данные юзеров из «инфосистем»? Это соцсети, но не только
Силовикам разрешат получать данные юзеров из «инфосистем»? Это соцсети, но не только
В МВД заявляют, что нашли инженера, который сливал данные омоновцев
В МВД заявляют, что нашли инженера, который сливал данные омоновцев
Обсуждение
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.