Чеклист для оценки работы с СУБД

21 июля 2009, 02:20
Оговорюсь сразу, что я не 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. Если причина упоминания какого-либо пункта не ясна - спрашивайте.
Обсуждение