Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| mysql:optimize [2015/10/13 14:21] – внешнее изменение 127.0.0.1 | mysql:optimize [2018/06/21 12:53] (текущий) – [Утилита mysqldumpslow] mirocow | ||
|---|---|---|---|
| Строка 12: | Строка 12: | ||
| SHOW VARIABLES LIKE ' | SHOW VARIABLES LIKE ' | ||
| </ | </ | ||
| + | |||
| + | ===== Настройка ===== | ||
| + | |||
| + | **key_buffer_size = 512M** | ||
| + | Таким образом выделяем 512 Mb под индексы таблиц MyISAM. Дело в том, что у меня половина баз в MyISAM (так исторически сложилось). | ||
| + | На 99,9% эти базы используются на чтение, | ||
| + | |||
| + | **innodb_buffer_pool_size = 512M** | ||
| + | Такой же объем памяти выделяем на таблицы InnoDB. | ||
| + | Тут нужно знать меру. Если у вас 1 база размером 100 Mb, то нет смысла выделять 1 Гб памяти – она всё равно не будет использована. | ||
| + | Во-вторых, | ||
| + | а ее индексы занимают в 15 раз меньше, | ||
| + | |||
| + | **innodb_additional_mem_pool_size = 16M** | ||
| + | Размер памяти, | ||
| + | |||
| + | **innodb_flush_method = O_DIRECT** | ||
| + | Тут мы вырубаем буферизацию таблиц для файловой системы и говорим MySQL обращаться к файлам напрямую. | ||
| + | |||
| + | **innodb_flush_log_at_trx_commit = 2** | ||
| + | При каждой транзакции MySQL пишет лог и сбрасывает на диск (значение 1). Значение 2 – сбрасываем в память. Мне не критично потерять транзакции за последние 2 секунды в случае падения сервера. | ||
| + | |||
| + | **join_buffer_size = 8M** | ||
| + | Память для запросов с джойнами, | ||
| + | |||
| + | **sort_buffer_size = 8M** | ||
| + | read_rnd_buffer_size = 8M | ||
| + | Полезно для запросов с сортировкой ORDER BY и группировкой GROUP BY. При малом значении сортировка идет во временной таблице на диске. | ||
| + | |||
| + | **tmp_table_size = 64M** | ||
| + | **max_heap_table_size = 32M** | ||
| + | Настройки для хранения временных таблиц в памяти. Временные таблицы часто образуются при больших джойнах. | ||
| + | |||
| + | **table_cache = 256** | ||
| + | Максимальное число одновременно открытых таблиц. | ||
| + | Количество одновременных соединений * количество открытых таблиц в соединении | ||
| + | Т.е. для каждого соединения используется свои ячейки из кэша. | ||
| + | |||
| + | **log_slow_queries** = / | ||
| + | **long_query_time = 1** | ||
| + | Пишем в лог медленные запросы - http:// | ||
| + | |||
| + | **query_cache_type = 2** | ||
| + | **query_cache_limit = 1M** | ||
| + | **query_cache_size = 32M** | ||
| + | Кэширование запросов внутри MySQL - http:// | ||
| + | |||
| + | ===== Пример конфигурации ===== | ||
| + | |||
| + | < | ||
| + | [mysqld] | ||
| + | |||
| + | interactive_timeout=180 | ||
| + | wait_timeout=180 | ||
| + | |||
| + | # | ||
| + | # | ||
| + | # | ||
| + | default-storage-engine = InnoDB | ||
| + | key_buffer_size = 64M | ||
| + | |||
| + | join_buffer_size = 8M | ||
| + | sort_buffer_size = 8M | ||
| + | read_rnd_buffer_size = 8M | ||
| + | tmp_table_size = 128M | ||
| + | max_heap_table_size = 64M | ||
| + | table_cache = 256 | ||
| + | table_open_cache = 64 | ||
| + | |||
| + | query_cache_type = 2 | ||
| + | query_cache_limit = 64M | ||
| + | query_cache_size | ||
| + | |||
| + | innodb_buffer_pool_instances = 2 | ||
| + | innodb_buffer_pool_size = 2G | ||
| + | innodb_log_file_size = 256MB | ||
| + | innodb_log_buffer_size = 4MB | ||
| + | innodb_flush_log_at_trx_commit = 2 | ||
| + | innodb_thread_concurrency = 8 | ||
| + | innodb_flush_method = O_DIRECT | ||
| + | innodb_additional_mem_pool_size = 16M | ||
| + | # | ||
| + | innodb_doublewrite=0 | ||
| + | innodb_support_xa=0 | ||
| + | # | ||
| + | innodb_data_file_path=ibdata1: | ||
| + | innodb_file_per_table=1 | ||
| + | skip-innodb_doublewrite | ||
| + | innodb_file_format=barracuda | ||
| + | # | ||
| + | |||
| + | long_query_time = 10 | ||
| + | log-queries-not-using-indexes = 1 | ||
| + | slow_query_log_file = / | ||
| + | slow_query_log = 1 | ||
| + | </ | ||
| + | |||
| + | ===== Анализ запросов ===== | ||
| + | |||
| + | |||
| + | ==== Утилита mysqldumpslow ==== | ||
| + | |||
| + | <code bash> | ||
| + | # mysqldumpslow -s at -t 10 | ||
| + | |||
| + | Reading mysql slow query log from / | ||
| + | Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows_sent=1.0 (1), Rows_examined=2.0 (2), Rows_affected=0.0 (0), root[root]@localhost | ||
| + | SELECT kc.CONSTRAINT_NAME, | ||
| + | FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE kc WHERE kc.TABLE_SCHEMA=' | ||
| + | ORDER BY kc.CONSTRAINT_NAME, | ||
| + | </ | ||
| + | |||
| + | Наблюдение в реальном времени | ||
| + | <code bash> | ||
| + | $ watch --interval=1 mysqldumpslow -s at -t 10 | ||
| + | </ | ||
| + | |||
| + | * [[mysql: | ||
| + | |||
| + | * Count — количество вхождений запроса в лог; | ||
| + | * Time — среднее и общее время запроса; | ||
| + | * Lock — время блокировки таблицы; | ||
| + | * Rows — Количество выбранных строк | ||
| + | |||
| + | === Параметры === | ||
| + | |||
| + | * -s at | ||
| + | * -t 10 | ||
| + | * / | ||
| + | |||
| + | ==== Mytop ==== | ||
| + | |||
| + | [[mysql: | ||
| + | |||
| + | ==== Explain ==== | ||
| + | |||
| + | ==== Сетевые подключения ==== | ||
| + | |||
| + | <code bash> | ||
| + | $ netstat -ntp | grep :51244 | ||
| + | tcp 0 0 127.0.0.1: | ||
| + | tcp 0 0 127.0.0.1: | ||
| + | </ | ||
| + | |||
| + | где 45384 - можно получить из **show full processlist; | ||
| + | |||
| + | < | ||
| + | 6 root localhost Sleep 0 0 | ||
| + | 2003 root localhost: | ||
| + | </ | ||
| + | |||
| + | ===== Статьи ===== | ||
| + | |||
| + | * http:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * http:// | ||
| + | * http:// | ||
| + | * http:// | ||