Категория: Оптимизация в MySQL (41)
| Оптимизация в MySQL » Использование символических ссылок для таблиц |
5.6.1.2 Использование символических ссылок для таблиц
Не следует использовать символические ссылки для таблиц в версиях до MySQL 4.0, где при работе с ними требуется особая тщательность. Проблема заключается в том, что, если запускаются команды ALTER TABLE, REPAIR TABLE или OPTIMIZE TABLE на таблице, связанной символической ссылкой, то символические ссылки будут удалены и заменены исходными файлами. Это происходит потому, что любая вышеназванная команда работает путем создания временного файла в каталоге базы данных и по завершении команды происходит замещение исходного файла временным. |
|
теги: MySQL, TABLE |
| |
| Оптимизация в MySQL » Использование символических ссылок для баз данных |
5.6.1.1 Использование символических ссылок для баз данных
Для создания символической ссылки для базы данных вначале следует создать каталог на некотором диске, где имеется свободное место, а затем создать символическую ссылку на него из каталога баз данных MySQL.
shell> mkdir /dr1/databases/test
shell> ln -s /dr1/databases/test mysqld-datadir
|
|
теги: MySQL, shell |
| |
| Оптимизация в MySQL » Вопросы, относящиеся к диску |
5.6 Вопросы, относящиеся к диску
Как уже упоминалось ранее, наиболее узким местом для производительности является поиск на диске. Эта проблема становится все более и более очевидной по мере того, как объем данных увеличивается настолько, что эффективное кэширование становится невозможным. Для крупных баз данных, где доступ к данным осуществляется более или менее случайным образом, можно с уверенностью сказать, что потребуется по меньшей мере один поиск по диску для чтения и пара поисков по диску для записи некоторой информации. Чтобы свести эту проблему к минимуму, следует использовать диски с малыми временами поиска. |
|
теги: RAID |
| |
| Оптимизация в MySQL » Синтаксис команды SET |
5.5.6 Синтаксис команды SET
SET [OPTION] SQL_VALUE_OPTION= value, ...
Команда SET OPTION устанавливает различные опции, влияющие на работу сервера или клиента. Действие любой установленной опции продолжается до конца текущего сеанса или до тех пор, пока не будет установлено другое значение этой опции. |
|
теги: SET, DEFAULT |
| |
| Оптимизация в MySQL » Как MySQL использует DNS |
5.5.5 Как MySQL использует DNS
Когда к mysqld подключается новый клиент, mysqld выделяет новый поток для обработки данного запроса. Этот поток вначале проверяет, имеется ли в кэше имен хостов имя требуемого хоста. Если нет, то поток вызовет функции gethostbyaddr_r() и gethostbyname_r(), чтобы определить имя хоста. |
|
теги: MySQL, DNS |
| |
| Оптимизация в MySQL » Как MySQL использует память |
5.5.4 Как MySQL использует память
В следующем перечне дано описание некоторых аспектов использования памяти сервером mysqld. Там, где это возможно, приводятся имена серверных переменных, относящихся к использованию памяти:
Буфер ключей (переменная key_buffer_size) используется совместно всеми потоками; другие буферы, используемые данным сервером, выделяются при необходимости (see section 5.5.2 Настройка параметров сервера). |
|
теги: MySQL |
| |
| Оптимизация в MySQL » Как компиляция и линкование влияет на скорость MySQL |
5.5.3 Как компиляция и линкование влияет на скорость MySQL
Большинство из последующих тестов выполняются под Linux с использованием тестов производительности MySQL, но они должны дать некоторое представление и для других операционных систем и рабочих нагрузок.
Самый быстрый исполняемый код получается при линковании с помощью -static.
Под Linux наиболее быстрый код можно получить при компилировании pgcc с опицей -O3. Чтобы скомпилировать sql_yacc.cc с этой опцией, требуется около 200 Mб памяти, поскольку компилятор gcc/pgcc забирает много памяти. |
|
теги: MySQL, Linux |
| |
| Оптимизация в MySQL » Настройка параметров сервера |
5.5.2 Настройка параметров сервера
Размеры буферов, используемые по умолчанию сервером mysqld, можно узнать с помощью следующей команды:
shell> mysqld --help
Эта команда выдает список всех опций mysqld и конфигурируемых переменных. |
|
теги: shell, SHOW, MySQL |
| |
| Оптимизация в MySQL » Настройка параметров системы, компляции и запуска |
5.5.1 Настройка параметров системы, компляции и запуска
Мы начинаем с вопросов системного уровня, поскольку некоторые из них требуют решения на самых ранних этапах. В других случаях может оказаться достаточно только беглого просмотра этого материала, поскольку значительного выигрыша в оптимизации он не обеспечивает. Однако всегда хорошо иметь представление о том, какую пользу можно получить при изменении параметров на этом уровне. |
|
теги: MySQL |
| |
| Оптимизация в MySQL » Настройка параметров системы, компляции и запуска |
5.5.1 Настройка параметров системы, компляции и запуска
Мы начинаем с вопросов системного уровня, поскольку некоторые из них требуют решения на самых ранних этапах. В других случаях может оказаться достаточно только беглого просмотра этого материала, поскольку значительного выигрыша в оптимизации он не обеспечивает. Однако всегда хорошо иметь представление о том, какую пользу можно получить при изменении параметров на этом уровне. |
|
теги: MySQL |
| |
| Оптимизация в MySQL » Открытие и закрытие таблиц в MySQL |
5.4.7 Открытие и закрытие таблиц в MySQL
Параметры table_cache, max_connections и max_tmp_tables задают максимальное количество файлов, которые сервер держит открытыми. Если увеличить один или оба этих параметра, то можно столкнуться с ограничением, накладываемым данной операционной системой на количество открытых файловых дескрипторов для одного процесса. Во многих системах, однако, этот предел можно увеличить. Поскольку способы изменения данного значения для разных систем могут быть совершенно различными, в каждом конкретном случае вам следует обращаться к документации по своей операционной системе. |
|
теги: MySQL |
| |
| Оптимизация в MySQL » Почему так много открытых таблиц? |
5.4.6 Почему так много открытых таблиц?
При запуске mysqladmin status можно увидеть что-нибудь вроде этого:
Uptime: 426 Running threads: 1 Questions: 11082 Reloads: 1 Open tables: 12
В чем же дело, ведь у вас всего 6 таблиц?
MySQL является многопоточной базой данных, поэтому для одной и той же таблицы могут одновременно присутствовать несколько запросов. Чтобы минимизировать эту проблему для двух потоков, имеющих различный статус на одном и том же файле, таблица открывается независимо каждым конкурирующим потоком. |
|
теги: ISAM |
| |
| Оптимизация в MySQL » Многостолбцовые индексы |
5.4.5 Многостолбцовые индексы
MySQL может создавать индексы по нескольким столбцам. Индекс может включать в себя до 15 столбцов (на столбцах CHAR и VARCHAR можно также использовать префикс столбца в качестве части индекса)
Многостолбцовый индекс может рассматриваться как упорядоченный массив, содержащий величины, созданные конкатенацией величин проиндексированных столбцов. |
|
теги: MySQL, first |
| |
| Оптимизация в MySQL » Индексы столбцов |
5.4.4 Индексы столбцов
В MySQL могут быть проиндексированы столбцы всех типов. Использование индексов на соответствующих столбцах представляет собой хороший способ ускорения выполнения операций SELECT.
Максимальное количество ключей и максимальная длина индексов определяется обработчиком таблиц (see section 7 Типы таблиц MySQL). |
|
теги: SELECT, TABLE, FULLTEXT |
| |
| Оптимизация в MySQL » Использование индексов в MySQL |
5.4.3 Использование индексов в MySQL
Индексы применяются для быстрого поиска строк с указанным значением одного столбца. Без индекса чтение таблицы осуществляется по всей таблице начиная с первой записи, пока не будут найдены соответствующие строки. Чем больше таблица, тем больше накладные расходы. Если же таблица содержит индекс по рассматриваемым столбцам, то MySQL может быстро определить позицию для поиска в середине файла данных без просмотра всех данных. Для таблицы, содержащей 1000 строк, это будет как минимум в 100 раз быстрее по сравнению с последовательным перебором всех записей. Однако в случае, когда необходим доступ почти ко всем 1000 строкам, быстрее будет последовательное чтение, так как при этом не требуется операций поиска по диску. |
|
теги: MySQL, SELECT |
| |
| Оптимизация в MySQL » Сделайте объем данных как можно меньше |
5.4.2 Сделайте объем данных как можно меньше
Одна из основных задач оптимизации заключается в том, чтобы данные (и индексы) занимали как можно меньше места на диске (и в памяти). Это дает значительные преимущества в работе, поскольку ускоряется чтение диска, а оперативная память, как правило, используется меньше. Индексирование также требует меньших ресурсов, если оно выполняется на меньших столбцах.
|
|
теги: MySQL, NULL |
| |
| Оптимизация в MySQL » Конструктивные особенности MySQL |
5.4.1 Конструктивные особенности MySQL
В MySQL данные и индексы хранятся отдельно, в разных файлах, в то время как во многих (практически во всех) базах данных данные и индексы помещаются вместе в одном и том же файле. Мы полагаем, что конструкция MySQL лучше подходит для очень широкого диапазона современных систем.
Существует еще один способ хранения исходных данных - когда данные для каждого столбца содержатся в отдельной области (примерами являются SDBM и Focus). |
|
теги: MySQL |
| |
| Оптимизация в MySQL » Вопросы блокирования таблиц |
5.3.2 Вопросы блокирования таблиц
Код блокирования таблиц в MySQL не создает тупиковых ситуаций.
Чтобы получить высокую скорость блокирования, в MySQL на таблицах всех типов, кроме InnoDB и BDB,используется табличная блокировка (вместо блокирования строк или столбцов). Если таблицы большие, то для большинства приложений табличная блокировка намного лучше, чем строковая, но существуют, конечно, и определенные подводные камни. |
|
теги: MySQL, BDB |
| |
|
|