Скорректируйте параметры запуска MySQL, измените файл /etc/my.cnf Настройте параметры запуска MySQL так, чтобы они вступили в силу после перезапуска MySQL, после версии MySQL 4 некоторые внутренние переменные можно установить во время выполнения MySQL, но при перезагрузке MySQL они будут недействительны. Программа mysqld — каталоги и файлы basedir = путь # Используйте данный каталог в качестве корневого каталога (каталога установки). datadir = путь # Читать файл базы данных из заданного каталога. pid-file = имя файла # Укажите файл для программы mysqld для хранения идентификатора процесса (доступен только для UNIX/Linux);
[mysqld] socket = /tmp/mysql.sock # Определяет сокетный файл для локальной связи между клиентской программой MySQL и сервером (по умолчанию файл /var/lib/mysql/mysql.sock на Linux — файл /var/lib/mysql/mysql.sock) port=3306 # Указывает порт, который слушает MsSQL key_buffer = 384M # key_buffer — размер буфера, используемого для индексации блоков, увеличивающий индекс, который он лучше обрабатывает (для всех чтений и многозаписей). Индексный блок буферизирован и используется всеми потоками, а размер key_buffer зависит от размера памяти. table_cache = 512 # Количество открытых таблиц для всех потоков. Увеличение этого значения увеличивает количество файловых дескрипторов, необходимых для mysqld. Это позволяет избежать накладных расходов на часто открывающиеся таблицы данных sort_buffer_size = 2M # Выделить буфер такого размера для каждого потока, который нужно отсортировать. Увеличение этого значения ускоряет операции ORDER BY или GROUP BY. Примечание: выделенная память, соответствующая этому параметру, эксклюзивна для каждого соединения! Если соединений 100, то общий размер буфера сортировки будет 100×6 = 600MB read_buffer_size = 2M # Размер буфера, который может использоваться для операции чтения запроса. Как и в sort_buffer_size, выделенная память, соответствующая этому параметру, также эксклюзивна для каждого соединения. query_cache_size = 32M # Задаёт размер буфера результатов запроса MySQL read_rnd_buffer_size = 8M # Измените параметр для случайного чтения после сортировки с помощью указателя строки. myisam_sort_buffer_size =64M # Буфер, необходимый для изменения порядка таблиц MyISAM при их изменении thread_concurrency = 8 # Максимальное количество одновременных потоков устанавливается как количество логических процессоров сервера ×2, и если процессор поддерживает H.T гиперпоток, × 2 thread_cache = 8 # #缓存可重用的线程数 skip-locking # предотвращает внешнюю блокировку MySQL, снижает риск ошибок и повышает стабильность. [mysqldump] max_allowed_packet =16M # Максимальный возможный пакет информации, который может передаваться между сервером и клиентом
[myisamchk] key_buffer = 256 м sort_buffer = 256 м read_buffer = 2М write_buffer = 2М
Другие опциональные параметры: back_log = 384 Задаёт количество возможных соединений для MySQL. Когда основной поток MySQL получает очень большое количество запросов на подключение за очень короткий промежуток времени, этот параметр вступает в силу, и основному потоку требуется немного времени на проверку соединения и запуск нового потока. Значение параметра back_log указывает, сколько запросов можно хранить в стеке в течение короткого времени, прежде чем MySQL временно перестанет отвечать на новые запросы. Если система имеет много соединений за короткий промежуток времени, необходимо увеличить значение этого параметра, который определяет размер очереди прослушивания для входящих TCP/IP соединений. Попытка установить лимит, который back_log выше вашей операционной системы, будет неэффективной. Значение по умолчанию — 50. Для систем Linux рекомендуется устанавливать целое число меньше 512. max_connections = n Максимальное количество подключений к базе данных, которое сервер MySQL может обрабатывать одновременно (настройка по умолчанию — 100). Если лимит превышен, будет сообщена ошибка «Слишком много соединений» key_buffer_size = n Значение RMA для индексных блоков (по умолчанию настройка 8M), увеличение индекса для лучшей обработки (для всех чтений и мультизаписей) record_buffer: Каждый поток, выполняющий последовательное сканирование, выделяет буфер такого размера для каждой сканируемой таблицы. Если вы делаете много последовательных сканирований, возможно, стоит увеличить это значение. Значение по умолчанию — 131072 (128K) wait_timeout: Сколько секунд сервер ждёт действия по соединению перед его закрытием. interactive_timeout: Сколько секунд сервер ждёт действия на интерактивном соединении перед отключением. Взаимодействующий клиент определяется как клиент, использующий опцию CLIENT_INTERACTIVE для mysql_real_connect(). Значение по умолчанию — 28800, вы можете изменить его на 3600. пропустить имя-разрешить Отключите разрешение DNS MySQL на внешних соединениях — использование этой опции уменьшит время, необходимое MySQL для разрешения DNS. Однако стоит отметить, что если эта опция включена, вся авторизация удалённого соединения хоста должна использовать метод IP-адреса, иначе MySQL не сможет обработать запрос на соединение нормально! log-slow-queries = slow.log Записывайте медленные запросы и оптимизируйте их по одному skip-innodb skip-bdb Закройте нежелательные типы таблиц и не добавляйте их, если это необходимо
# > ПОКАЗЫВАЮТ ПЕРЕМЕННЫЕ, ТАКИЕ КАК '%query_cache%'; # > ПОКАЗАТЬ СТАТУС ТИПА 'Qcache%'; Если значение Qcache_lowmem_prunes очень велико, это указывает на недостаточное буферирование; Если значение Qcache_hits очень велико, это означает, что буфер запросов используется очень часто, и если значение мало, но влияет на эффективность, то можно рассмотреть возможность отказа от буферизации запросов. Если значение Qcache_free_blocks очень велико, это указывает на большое количество мусора в буфере.
########################################## ###### max_allowed_packet ###### ########################################## Коммуникационный пакет — это одна SQL-команда, отправляемая на сервер MySQL, или одна строка клиенту. Максимальный возможный пакет, который можно отправить между сервером MySQL 5.1 и клиентом, составляет 1 ГБ. Когда клиент MySQL или сервер mysqld получает пакет больше max_allowed_packet байт, возникает ошибка «пакет слишком большой», и соединение закрывается. Для некоторых клиентов, если пакет связи слишком большой, вы можете столкнуться с ошибкой «Потеря соединения с сервером MySQL» во время запроса. И клиент, и сервер имеют свои max_allowed_packet переменные, поэтому если вы планируете обрабатывать большие пакеты, нужно добавить эту переменную и на клиент, и на сервер. Если вы используете клиентскую программу mysql, max_allowed_packet переменной по умолчанию составляет 16 МБ. Чтобы установить большее значение, вы можете запустить mysql следующим образом: mysql> mysql --max_allowed_packet=32M Размер информационного пакета устанавливается на 32 МБ. По умолчанию max_allowed_packet для сервера составляет 1 МБ. Если серверу нужно обрабатывать большие запросы, вы можете увеличить это значение (например, если вы готовитесь к обработке больших столбцов). Например, чтобы установить 16 МБ, можно запустить сервер следующим образом: mysql> mysqld --max_allowed_packet=16M
Вы также можете использовать файлы параметров для установки max_allowed_packet. Чтобы установить эту переменную для сервера на 16 МБ, добавьте содержимое нисходящего канала в файл опций: [mysqld] max_allowed_packet=16 млн Можно безопасно увеличивать значение этой переменной, так как дополнительная память выделяется только при необходимости. Например, mysqld выделяет больше памяти только если вы отправляете длинный запрос или если mysqld должен возвращать большие строки результатов. Малое значение по умолчанию этой переменной является мерой предосторожности для обнаружения ошибочных пакетов между клиентом и сервером и для того, чтобы переполнение памяти не было вызвано случайным использованием больших пакетов. Если вы используете большие значения blob и не предоставляете mysqld разрешения на доступ к достаточному объему памяти для обработки запросов, вы также столкнётесь с странными проблемами, связанными с большими пакетами. Если вы подозреваете, что это так, попробуйте увеличить ulimit -d до 256000 в mysqld_safe скрипте и перезапустите mysqld. ########################################## ##### Как открывать и закрывать таблицы баз данных в MySQL ##### ########################################## table_cache, max_connections и max_tmp_tables влияют на максимальное количество файлов, которые сервер держит открытыми. Если увеличить одно или оба этих значения, вы можете столкнуться с ограничением, наложенным операционной системой на количество файловых дескрипторов, которые открывает каждый процесс. Однако вы можете увеличить лимит на многих системах. Попросите документацию вашей ОС выяснить, как это сделать, так как методы изменения лимитов сильно различаются от системы к системе. table_cache связано с max_connections. Например, для 200 открытых соединений буфер таблицы должен быть не менее 200 * n, где n — максимальное количество таблиц в соединении. Кэш открытых таблиц можно увеличить максимум до одного table_cache (64 по умолчанию; Это можно сделать с помощью -O в mysqld table_cache=#选项来改变). Таблица никогда не закрывается, кроме случаев, когда кэш заполнен и другой поток пытается открыть таблицу, или если вы используете mysqladmin refresh или mysqladmin flush-tables. Когда кэш таблицы заполнен, сервер использует следующую процедуру для поиска записи в кэше для использования: Таблицы, которые в настоящее время не используются, публикуются в порядке наименее использованных (LRU). Если кэш заполнен и нет таблиц для освобождения, но нужно открыть новую таблицу, кэш должен быть временно увеличен. Если кэш находится в временном расширенном состоянии и таблица меняется с активной на неактивную, она закрывается и освобождается из кэша. Откройте таблицу для каждого одновременного доступа. Это означает, что если у вас есть два потока, которые обращаются к одной и той же таблице или дважды обращаются к ней в одном запросе (с помощью AS), таблицу нужно открывать дважды. Первое открытие любой таблицы рассчитывает на два дескриптора файла; Каждое дополнительное использование таблицы учитывает только один файловый дескриптор. Для первого открытия используется дополнительный дескриптор для индексации файла; Этот дескриптор используется во всех потоках
|