Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #63, ФЕВРАЛЬ 2006 г.

суперэффективные мускулы

TONY (PORCO@ARGENTINA.COM)

Спецвыпуск: Хакер, номер #063, стр. 063-060-2


Buffer pool size — указывает для InnoDB размер буфера, где кешируются индексы и данные таблиц. На выделенных серверах баз данных рекомендуется устанавливать его в количестве 80% оперативной памяти.

дизайн базы данных

Оптимизация — это комплексная задача, и на работу твоей СУБД может повлиять множество факторов. Необходимо представлять себе, как работает вся система и где на пути потока данных лежат узкие бутылочные горла. Седьмая глава MySQL-мануала целиком посвящена этому вопросу. Производительность SQL-запросов хорошо поднимается при отказе от механизма транзакций. Взамен на тебя взваливается задача проверки корректности SQL-запросов и входящих данных. Типичный пример граблей, на которые я наступил со всего размаху (причем меня сильно ударило по голове), — это обвал клиента при попытке записать в базу данных некорректное число с плавающей точкой. В процессе разработки мне даже в голову не приходило, что кто-то будет пытаться записать в базу NAN- (not a number) или INF-число (infinity). Пришлось проверять входные числа с плавающей запятой.

Также имеет смысл для полей таблиц указывать значения полей по умолчанию (NULL). Стоит отказаться от переносимости SQL-кода на другую СУБД, потому что каждая реализация SQL-сервера частично отличается от стандарта. Эти отличия часто касаются именно оптимизации производительности. Не стоит забывать о числе строк в таблице: слишком пухлая таблица существенно замедляет работу сервера при обработке запросов, и если таблица содержит неактуальную информацию, то лучше архивировать ее и удалять из таблицы, после чего подвергать таблицу обслуживанию, как показано на рис. «Обслуживание таблицы».

storage engine

MySQL поддерживает несколько движков хранилищ данных. InnoDB является движком по умолчанию для пользовательских таблиц, он поддерживает транзакции и блокировку таблиц, сохраняет данные на диске в месте, указанном тобой при инсталляции сервера. Движок MyISAM используется для системных таблиц, он не поддерживает транзакции, поэтому предоставляет солидную производительность, также его можно использовать в том случае, если нужен полный поиск по хранящимся данным. Остальные дисковые движки, используемые MySQL'ом, не превосходят его по производительности. Кроме дисковых движков, в MySQL есть два движка, хранящих данные в памяти, — это самые быстрые движки, но с понятными ограничениями. Движок NDB Cluster поддерживает транзакции и используется для построения кластеров данных, правда, он пока реализован только для платформ Linux, Solaris и Mac OS X. Наконец, движок Memory является самым быстрым движком MySQL'а благодаря тому, что он не поддерживает транзакции и сохраняет данные в памяти. Memory может быть использован для временного хранения данных. Более подробную информацию ищи в14-й главе MySQL'ного талмуда.

буферизация данных

Очень часто клиентское приложение требует много процессорного времени и хочется минимизировать время выполнения SQL-запросов. Для начала можно воспользоваться ключевым словом DELAYED, которое включает собственную MySQL'ную буферизацию запросов. Ты добьешься самого большого выигрыша при одновременной вставке множества строк, правда, придется расплачиваться тем, что ты не получишь результата записи данных и не будешь точно знать момент, в который данные окажутся в таблице. Если тебе недостаточно и такой производительности, предпринимай более изощренные действия. Правда, описанный ниже способ подходит только для неравномерного поступления данных, то есть в ситуации, когда данные приходят большими порциями, но не ежесекундно, а, скажем, раз в десять секунд. Алгоритм работы следующий.

Назад на стр. 063-060-1  Содержание  Вперед на стр. 063-060-3