1. Отсутствие в базе мусора, мешающего добраться до актуальных данных. Можно сформулировать две подзадачи:
· Грамотное проектирование базы.
· Сборка мусора, возникающего при работе СУБД.
2. Наличие быстрых путей доступа к данным - индексов.
3. Возможность использования оптимизатором этих быстрых путей.
4. Обход известных проблем.
Поддержание базы в порядке
В данном разделе описаны действия, которые должны периодически выполняться для каждой базы. От разработчика требуется только настроить их автоматическое выполнение (при помощи cron) и опытным путём подобрать его оптимальную частоту.
Команда VACUUM
Используется для «сборки мусора» в базе данных. Существует в двух вариантах:
· VACUUM FULL пытается удалить все старые версии записей и, соответственно, уменьшить размер файла, содержащего таблицу. Этот вариант команды полностью блокирует обрабатываемую таблицу.
· VACUUM помечает место, занимаемое старыми версиями записей, как свободное. Использование этого варианта команды, как правило, не уменьшает размер файла, содержащего таблицу, но позволяет не дать ему бесконтрольно расти, зафиксировав на некотором приемлемом уровне. При работе VACUUM возможен параллельный доступ к обрабатываемой таблице.
При использовании в форме VACUUM [FULL] ANALYZE, после сборки мусора будет обновлена статистика по данной таблице, используемая оптимизатором.
Рекомендуется достаточно частое, например, раз в несколько минут (!) выполнение VACUUM ANALYZE для часто обновляемых баз (или отдельных таблиц). В обыкновенных случаях достаточно ежедневного выполнения этой команды. При этом обратите внимание: если «бутылочное горлышко» вашего сервера находится в районе дисковой подсистемы, то выполнение VACUUM параллельно с обычной работой может крайне отрицательно сказаться на производительности.
Команду VACUUM FULL стоит запускать достаточно редко, не чаще раза в неделю. Её также имеет смысл запускать вручную для конкретной таблицы после удаления или обновления большой части записей в ней.
Команда ANALYZE
Служит для обновления информации о распределении данных в таблице. Эта информация используется оптимизатором для выбора наиболее быстрого плана выполнения запроса.
Обычно команда используется в связке VACUUM ANALYZE. Если в базе есть таблицы, данные в которых не изменяются и не удаляются, а лишь добавляются, то для таких таблиц можно использовать отдельную команду ANALYZE. Также стоит использовать эту команду для отдельной таблицы после добавления в неё большого количества записей.
Команда REINDEX
Команда REINDEX используется для перестройки существующих индексов. Использовать её имеет смысл в случае
· порчи индекса;
· постоянного увеличения его размера.
Второй случай требует пояснений. Индекс, как и таблица, содержит блоки со старыми версиями записей. SQL не всегда может заново использовать эти блоки, и поэтому файл с индексом постепенно увеличивается в размерах. Если данные в таблице часто меняются, то расти он может весьма быстро.
Если замечено подобное поведение какого-то индекса, то стоит настроить для него периодическое выполнение команды REINDEX. Команда REINDEX, как и VACUUMFULL, полностью блокирует таблицу, поэтому выполнять её надо тогда, когда загрузка сервера минимальна.
Использование индексов
Опыт показывает, что наиболее значительные проблемы с производительностью вызываются отсутствием нужных индексов. Поэтому столкнувшись с медленным запросом, в первую очередь стоит проверить, существуют ли индексы, которые он может использовать. Если нет – следует построить их.
Излишек индексов, впрочем, тоже чреват проблемами:
· Команды, изменяющие данные в таблице, должны изменить также и индексы. Очевидно, чем больше индексов построено для таблицы, тем медленнее это будет происходить.
· Оптимизатор перебирает возможные пути выполнения запросов. Если построено много ненужных индексов, то этот перебор будет идти дольше.
Единственное, что можно сказать с большой степенью определённости -поля, являющиеся внешними ключами, и поля, по которым объединяются таблицы, индексировать надо обязательно.
Команда EXPLAIN [ANALYZE]
Команда EXPLAIN [запрос] показывает, каким образом SQL собирается выполнять ваш запрос. Команда EXPLAIN ANALYZE [запрос] выполняет запрос и показывает как изначальный план, так и реальный процесс его выполнения.
Чтение вывода этих команд - искусство, которое приходит с опытом. Для начала стоит обратить внимание на следующее:
· Использование полного просмотра таблицы (seq scan).
· Использование наиболее примитивного способа объединения таблиц (nested loop).
· Для EXPLAIN ANALYZE: нет ли больших отличий в предполагаемом количестве записей и реально выбранном? Если оптимизатор использует устаревшую статистику, то он может выбирать не самый быстрый план выполнения запроса.
Следует отметить, что полный просмотр таблицы далеко не всегда медленнее просмотра по индексу. Если, например, в таблице-справочнике несколько сотен записей, умещающихся в одном-двух блоках на диске, то использование индекса приведёт лишь к тому, что придётся читать ещё и пару лишних блоков индекса. Если в запросе придётся выбрать 80% записей из большой таблицы, то полный просмотр опять же получится быстрее.
При тестировании запросов с использованием EXPLAIN ANALYZE можно воспользоваться настройками, запрещающими оптимизатору использовать определённые планы выполнения.
Перенос логики на сторону сервера
Этот пункт очевиден для опытных пользователей SQL и предназначен для тех, кто использует или переносит на SQL приложения, написанные изначально для более примитивных СУБД.
Реализация части логики на стороне сервера через хранимые процедуры, триггеры, правила часто позволяет ускорить работу приложения. Действительно, если несколько запросов объединены в процедуру, то не требуется
· пересылка промежуточных запросов на сервер;
· получение промежуточных результатов на клиент и их обработка.
Кроме того, хранимые процедуры упрощают процесс разработки и поддержки: изменения надо вносить только на стороне сервера, а не менять запросы во всех приложениях.
Оптимизация конкретных запросов
Существуют отдельные запросы, для которых по разным причинам нельзя заставить оптимизатор использовать индексы, и которые будут всегда вызывать полный просмотр таблицы. Таким образом, если вам требуется использовать эти запросы в требовательном к быстродействию приложении, то придётся их изменить.
Перечисленные выше способы одни из некоторых, позволяющих оптимизировать запросы, ускоряя из выполнение.
Заключение
В настоящее время для большей конкурентоспособности предприятия следует помнить о информационных технологиях. Их использование предоставляет как дополнительные возможности (быстрота обработки и передачи информации), так и дополнительные трудности (защита информации).
При внедрении новых технологий требуется тщательно продумать, проанализировать различные возможности применения аппаратных и программных средств для получения наилучшего результата как в модернизации так и последующего сопровождения (обслуживания).
Так же в данном отчете было охарактеризовано предприятие ООО «Пионер», изучено его аппаратное и программное обеспечение, обслуживание вычислительной техники и периферийных устройств, а так же освоены функции сетевого администрирования.
В данном отчете так же было рассмотрено и проведено сравнение нескольких операционных систем на базе Windows и UNIX, и рассмотрены методы оптимизации баз данных.
Список использованной литературы
1. MicrosoftWindows 2000 Professional. Учебный курс MCSA/MCSE: Пер. с англ. – 3-е изд., перераб. – М.: Издательско-торговый дом «Русская Редакция», 2003, - 672 стр.: ил.
2. MicrosoftWindowsXPProfessional. Учебный курс MCSA/MCSE: Пер. с англ. – 2-е изд., писпр. – М.: Издательско-торговый дом «Русская Редакция», 2003, - 1008 стр.: ил.
3. Знакомство с MicrosoftWindowsServer 2003 /Пер. с англ. – М.: Издательско-торговый дом «Русская Редакция», 2003, - 464 стр.: ил.
4. FreeBSD 6. Полное руководство. : Пер. с англ. – М. : ООО»И.Д. Вильямс», 2007. – 1056 с. : ил. – Парал. Тит. Англ.
5. wm-help.net/books-online/