Шрифт:
Интервал:
Закладка:
• при четвертой попытке восстановления установите флажок Use FRM (соответствует команде REPAIR TABLE <Имя таблицы> USE_FRM).
Рис. 5.19. Окно Repair TablesНажмите кнопку Repair Tables. В окне отобразится результат восстановления таблиц (аналогично рис. 5.18). Итак, вы научились проверять и в случае повреждений восстанавливать таблицы с типом MyISAM. Рассмотрим теперь последнюю в этой главе тему – получение информации о событиях, происходящих на сервере MySQL, с помощью различных видов журналов.
5.5. Просмотр журналов работы
Журналы работы сервера MySQL по умолчанию находятся в папке data корневой папки MySQL. Здесь вы можете найти следующие виды журналов.
• Журнал ошибок.
Файл с именем <Имя хоста>.err. Содержит сведения об ошибках в работе сервера, а также о запусках и остановках сервера. Просмотреть файл вы можете с помощью любого текстового редактора, например Блокнот или WordPad.
• Двоичные журналы.
Файлы с именем <Имя хоста>-bin.xxxxxx, где xxxxxx – порядковый номер журнала. Содержат историю изменений данных в базе. Создаются в случае, если сервер запущен с параметром – log-bin (более подробно об этом рассказывалось в подразделе «Двоичные журналы»).
Для просмотра двоичных журналов откройте окно командной строки Windows и выполните команду
mysqlbinlog <Список журналов>
или
mysqlbinlog <Список журналов> > <Имя файла>
В первом случае содержимое журналов, представленное в виде SQL-команд, отобразится в окне командной строки, во втором – запишется в указанный файл, который вы можете открыть в любом текстовом редакторе.
• Общий журнал запросов.
Файл с именем <Имя хоста>. log. Содержит полную информацию о подключениях и отключениях клиентских приложений и обо всех выполняемых SQL-командах. Создается в случае, если сервер запущен с параметром – log. Просмотреть общий журнал запросов можно с помощью любого текстового редактора, например WordPad или с помощью графической утилиты MySQL Administrator (см. ниже).
• Журнал медленных запросов.
Файл с именем <Имя хоста>-slow.log. Содержит информацию об SQL-командах, выполнение которых заняло слишком много времени (по умолчанию – более 10 с), и тем самым позволяет выявлять объекты, требующие оптимизации. Создается в случае, если сервер запущен с параметром – log-slow-queries. Просмотреть журнал медленных запросов можно с помощью любого текстового редактора, например WordPad, или с помощью графической утилиты MySQL Administrator.
Графическая утилита MySQL Administrator предоставляет удобный интерфейс для изучения общего журнала запросов и журнала медленных запросов (рис. 5.20). Запустив MySQL Administrator, в левой области главного окна щелкните пункт Server Logs (Журналы работы сервера) и откройте нужную вкладку: General Query Log (Общий журнал запросов) или Slow Query Log (Журнал медленных запросов).
Рис. 5.20. Просмотр журналов работыВверху вкладки вы увидите полосу прокрутки, которая показывает, какой фрагмент журнала вы сейчас просматриваете. В поле Page Content (Содержимое страницы) в правой части вкладки отображаются собственно строки данного фрагмента журнала, а в поле Events of page (События на странице) представлен список событий, облегчающий навигацию по журналу. Итак, вы теперь знаете, как найти интересующую вас информацию в журналах работы сервера MySQL. Подведем краткие итоги этой главы.
5.6. Резюме
В данной главе вы получили базовые сведения об управлении пользователями и их привилегиями, о резервировании базы данных и ее восстановлении в случае сбоя, об исправлении повреждений в таблицах с типом MyISAM, а также о просмотре журналов, создаваемых в процессе функционирования сервера MySQL. Эти сведения помогут вам успешно использовать базы данных и минимизировать возможные проблемы.
В последней главе этой книги вы найдете несколько советов по повышению производительности базы данных.
Глава 6 Оптимизация
Если с увеличением объема вашей базы данных она стала работать слишком медленно, зачастую самый простой путь решения этой проблемы – увеличение мощности аппаратной платформы сервера. Однако повысить быстродействие системы можно и без наращивания аппаратных ресурсов, а за счет оптимизации таблиц, запросов, настроек сервера и др. В этой главе приведен ряд простых правил, выполнение которых позволит ускорить операции с данными. В первую очередь узнаем, как улучшить структуру таблиц.
6.1. Оптимизация структуры данных
Если «узким местом» вашей базы данных является одна или несколько таблиц, попробуем скорректировать структуру этих таблиц:
• выбрать наиболее подходящий тип таблицы;
• минимизировать объем данных в таблице;
• пересмотреть набор индексов в таблице;
• указать необходимые значения опциональных параметров.
Как было сказано в предыдущих главах, каждый тип таблиц имеет свои преимущества и недостатки. Если требуется обеспечить высокую производительность операций чтения данных (например, таблица будет использоваться главным образом для анализа содержащихся в ней данных или для генерации динамических веб-страниц), предпочтительным типом такой таблицы является MyISAM. Если же данные в таблице будут редактироваться множеством пользователей (это часто происходит в корпоративных базах данных), желательно присвоить таблице тип InnoDB. В разделе 6.4 «Проблемы, связанные с блокировками» мы рассмотрим особенности блокировки для каждого типа таблицы.
Минимизация объема данных позволяет ускорить чтение данных с диска и снизить загруженность оперативной памяти. Перечислим несколько способов минимизации объема данных.
• Хранение мультимедийных данных (изображений, аудио– и видеозаписей) не в базе данных, а в файловой системе.
Чтение большого файла требует в несколько раз меньше ресурсов, чем получение тех же данных с помощью запроса из столбца с типом BLOB. Поэтому рекомендуется хранить в базе данных не сами мультимедийные файлы, а только пути к ним.
• Подбор типов столбцов с наименьшим размером.
Например, если значения в целочисленном столбце не могут превышать 10 000, целесообразно объявить его как SMALLINT, а не INT или MEDIUMINT. Определить диапазон возможных значений столбца вы можете с помощью запроса
SELECT <Список столбцов> FROM <Имя таблицы> PROCEDURE ANALYSE();
Выполнив этот запрос после загрузки данных в таблицу, вы узнаете максимальное значение числового столбца, максимальную длину символьного столбца, количество неопределенных значений в столбце и многое другое.
• Указание свойства NOT NULL для всех столбцов, для которых это возможно.
Если в столбце не предполагается использовать неопределенные значения, задание свойства NOT NULL позволит уменьшить длину каждого значения на 1 бит.
Исключением из правила минимизации объема данных является использование статического формата таблиц. Другими словами, если в таблице с типом MyISAM отсутствуют символьные столбцы, допускающие значения переменной длины (такие как VARCHAR, TEXT, BLOB и т. п.), то такая таблица по умолчанию сохраняется в статическом формате; если же в таблице есть столбцы с переменной длиной значений, то по умолчанию применяется динамический формат. Как правило, динамические таблицы занимают значительно меньше места, чем статические, однако статические таблицы работают намного быстрее....Примечание
Вы также можете явно указать формат таблицы MyISAM с помощью опционального параметра ROW_FORMAT. Описание этого параметра приведено в конце данного раздела.
Если вы все же используете динамические таблицы MyISAM, необходимо учитывать, что изменение данных в такой таблице может привести к ее фрагментации. Так, если значение в символьном столбце заменяется более длинным, то строка таблицы разделяется на две (или более) части, которые хранятся отдельно друг от друга. Фрагментация сказывается на скорости доступа к данным, поэтому динамическую таблицу рекомендуется время от времени (в зависимости от интенсивности изменений) дефрагментировать с помощью команды
OPTIMIZE TABLE <Имя таблицы>;
Следующий этап оптимизации – настройка набора индексов. Индекс для столбца таблицы позволяет многократно ускорить поиск с условием на значение этого столбца, сортировку (ORDER BY) и группировку (GROUP BY) по значениям столбца, вычисление максимального и минимального значения, а также объединение таблиц. Благодаря наличию индекса выполнение всех этих операций не потребует последовательного перебора всех строк таблицы.
Для максимально эффективного использования индексов необходимо учитывать следующие факты.
• Индекс замедляет добавление и обновление строк таблицы. Поэтому рекомендуется создавать только те индексы, которые будут использоваться в часто выполняемых запросах.
• Для поиска с условиями на значение нескольких столбцов лучше всего подходит многостолбцовый индекс. Если же в таблице есть только отдельные индексы для каждого столбца, то будет использован лишь один из них, в наибольшей степени сужающий круг подходящих записей.
- C++ - Страустрап Бьярн - Программирование
- Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - Хелен Борри - Программирование
- Delphi. Учимся на примерах - Сергей Парижский - Программирование
- Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп - Программирование
- Программирование на Python с нуля - Максим Кононенко - Программирование