MySQL тюнинг, многих интерисует, а как быть не знаем

12
D
На сайте с 05.06.2007
Offline
155
6744

Давайте поделимся опытом в тюнинге MySQL

Около недели пытался вывести оптимальный конфиг для большого числа пользователей

(при достаточном наличие оперативки), и пока дошёл до такого:


max_connections = 800
max_user_connections = 50
key_buffer = 128M
table_cache = 2048
tmp_table_size = 128M
max_heap_table_size = 128M
sort_buffer_size = 8M
read_buffer_size = 1M
read_rnd_buffer_size = 2M
max_allowed_packet = 16M
thread_stack = 128K
thread_cache_size = 8
query_cache_limit = 1M
query_cache_size = 16M

В состоянии MySQL мне советуется поднять ещё эти настройки


table_cache = 2048
tmp_table_size = 128M
max_heap_table_size = 128M

хотя они и так уже велики :(

Говорится о том что mysql слишком часто использует диск для записи временных таблиц, как быть в этом случае? Поднимая эти параметры кушается много памяти, а эффекта особо не наблюдается.

Из phpMyadmin за 9 часов работы сервера:

Created_tmp_disk_tables 133 k Количество временных таблиц, автоматически созданных сервером на диске, во время выполнения SQL-выражений. Если значение Created_tmp_disk_tables велико, следует увеличить значение переменной tmp_table_size, чтобы временные таблицы располагались в памяти, а не на жестком диске.

Opened_tables 163 k Общее количество открывавшихся таблиц. При большом значении переменной рекомендуется увеличить размер кеша таблиц (table_cache).
Написал не мало шедевров ;)
N
На сайте с 06.12.2006
Offline
75
#1

Временных таблиц много создается изза запросов с группировками и сортировками.

D
На сайте с 05.06.2007
Offline
155
#2
newd:
Временных таблиц много создается изза запросов с группировками и сортировками.

Оптимизировать скрпиты пользователей не вариант, нужно решение через конфиг :)

Просто подозвераю что остновная нагрузка на сервер именно от записи на диск этих таблиц.

N
На сайте с 06.05.2007
Offline
419
#3
Dimanych:
Говорится о том что mysql слишком часто использует диск для записи временных таблиц, как быть в этом случае? Поднимая эти параметры кушается много памяти, а эффекта особо не наблюдается.

типичная ошибка всех автоматических систем настройки. ряд запросов всегда увеличивают эти счетчики.

Ну перенесите tmpdir в tmpfs, может и выиграете чуть-чуть.

Есть небольшая проблема : во время repair больших таблиц этот же tmpdir будет использоваться и для хранения больших временных файлов.

Просто подозвераю что остновная нагрузка на сервер именно от записи на диск этих таблиц.

так сделайте мониторинг и сравните число операций записи до и после tmpfs.

Opened_tables 163 k Общее количество открывавшихся таблиц. При большом значении переменной рекомендуется увеличить размер кеша таблиц (table_cache)

Поднимайте еще. Современные ОС нормально вытягивают и десятки тысяч открытых файлов.

Если это хостинг, key_buffer не слишком ли мал?

Кнопка вызова админа ()
Zaqwr
На сайте с 08.08.2007
Offline
111
#4

уменьшите таймауты, можно будет уменьшить количество коннектов>больше останется оперативки под другие задачи. к примеру кэш в /dev/shm или попросту в память.

Администрирование, Linux, Cisco, Juniper
KU
На сайте с 17.07.2008
Offline
251
#5

Нужно смотреть задачу, крутить настройки и смотреть show status. И понимать что делаете :)

Хостинг ( https://good-host.net ) / Linux VPS ( https://good-host.net/vps ) / Windows VPS ( https://good-host.net/windows-vps ) / Выделенные серверы ( https://good-host.net/dedicated ) 14 лет онлайн!
D
На сайте с 05.06.2007
Offline
155
#6

table_cache пробовал поднять с 2тыс до 20тыс,

ничего не заметил кроме того что вместо 320мб оперативки стало использоваться 600мб.

вообще на сервере 80тыс таблиц, не означает ли это что 80 мне и надо ставить?

И на сколько это вообще эффективно держать все таблицы открытыми?

Меня скорее беспокоит первый параметр tmp_table_size, так как подняв его до 512мб, сохранение таблиц на диск намного не улучшилось, получаеться что 50% всё ещё сохранятеся на диск, разница с параметром при 128мб не существенная (

MB
На сайте с 24.02.2009
Offline
175
#7

у меня примерно такая же проблема с временными таблицами, половина пишется на диск, имхо изменением параметра tmp_table_size тут не обойтись, нужно копаться в структуре бд, я пока не решил эту проблему.

seocore
На сайте с 25.09.2006
Offline
143
#8
Dimanych:
вообще на сервере 80тыс таблиц, не означает ли это что 80 мне и надо ставить? И на сколько это вообще эффективно держать все таблицы открытыми?

по идее, если хотите получить хороший процент "попадания" то надо 80к открытыми и держать - но это перебор, больше пары тыс. открытыми лучше не держать

Dimanych:
Меня скорее беспокоит первый параметр tmp_table_size, так как подняв его до 512мб, сохранение таблиц на диск намного не улучшилось, получаеться что 50% всё ещё сохранятеся на диск, разница с параметром при 128мб не существенная (

вам надо крутить другие буферы, а не tmp_table_size, например все остальные буферы увеличьте в 2 раза, посмотрите как это повлияет на % попадания в кеш.

увеличивайте key_buffer до размера всех индексов таблиц +20%

PS: держите базы данных на отдельном разделе, чтобы они не переплетались с логами и прочими "растущими" файлами :)

Инструменты для веб-мастера: кластеризатор СЯ (https://goo.gl/MQWfqO), все запросы конкурента (https://goo.gl/hd5uHS), дешевые XML-лимиты (https://goo.gl/aDZbPI)
[umka]
На сайте с 25.05.2008
Offline
456
#9
Dimanych:
Оптимизировать скрпиты пользователей не вариант, нужно решение через конфиг :)

Конфигами руки пользователям не вправить :)

Если только у "пользовательских рук" нет отдельного конфига ))

Лог в помощь!
N
На сайте с 06.05.2007
Offline
419
#10

Еще разок: в документации описаны случаи, когда простой запрос МОЖЕТ (но не обязан) привести к созданию временного файла даже если размеры таблиц в памяти достаточно велики

Some conditions prevent the use of an in-memory temporary table, in which case the server uses an on-disk table instead:

Presence of a BLOB or TEXT column in the table

Presence of any column in a GROUP BY or DISTINCT clause larger than 512 bytes

Presence of any column larger than 512 bytes in the SELECT list, if UNION or UNION ALL is used

http://dev.mysql.com/doc/refman/5.1/en/internal-temporary-tables.html

То есть, достаточно частые случаи для массового хостинга. Вы не избавитесь от растущего счетчика Created_tmp_disk_tables никогда.

У меня, кстати, сходу не получается создать такой вредный запрос. Видимо, есть не описанные в документации нюансы. Но факт остается фактом : они действительно растут довольно часто, увеличение параметров не помогает.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий