Помогите в настройке MySQL

A8
На сайте с 17.10.2011
Offline
22
6778

Доброго времени суток.

Нужнаюсь в подсказке может кто уже с таким сталкивался.

У меня VPS

Virtual CPU 1000Mhz x 2, 4600Mb memory, 20480Mb disk

При оптимизации с помощью mysqltuner

зашел в тупик никак не могу побороть строку

[!!] Temporary tables created on disk: 26% (97 on disk / 365 total)

Чем долmше сервер после ребута тем хуже процент созданных на диске временных таблиц уже все перепробовал...

помогите

То что выдает mysqltuner:

-------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.0.77
[OK] Operating on 64-bit architecture

-------- Storage Engine Statistics -------------------------------------------
[--] Status: -Archive -BDB -Federated +InnoDB -ISAM -NDBCluster
[--] Data in MyISAM tables: 158M (Tables: 896)
[--] Data in InnoDB tables: 592K (Tables: 36)
[!!] Total fragmented tables: 3

-------- Security Recommendations -------------------------------------------
[OK] All database users have passwords assigned

-------- Performance Metrics -------------------------------------------------
[--] Up for: 7m 10s (6K q [14.328 qps], 1K conn, TX: 12M, RX: 1M)
[--] Reads / Writes: 87% / 13%
[--] Total buffers: 2.5G global + 832.0K per thread (100 max threads)
[OK] Maximum possible memory usage: 2.6G (58% of installed RAM)
[OK] Slow queries: 0% (0/6K)
[OK] Highest usage of available connections: 14% (14/100)
[OK] Key buffer size / total MyISAM indexes: 1.0G/42.1M
[OK] Key buffer hit rate: 95.1% (99K cached / 4K reads)
[OK] Query cache efficiency: 37.2% (1K cached / 3K selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 2% (25 temp sorts / 963 sorts)
[!!] Temporary tables created on disk: 26% (97 on disk / 365 total)
[OK] Thread cache hit rate: 96% (35 created / 1K connections)
[OK] Table cache hit rate: 99% (950 open / 956 opened)
[OK] Open file limit used: 35% (1K/5K)
[OK] Table locks acquired immediately: 100% (2K immediate / 2K locks)
[OK] InnoDB data size / buffer pool: 592.0K/8.0M

-------- Recommendations -----------------------------------------------------
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance
MySQL started within last 24 hours - recommendations may be inaccurate
Enable the slow query log to troubleshoot bad queries
Temporary table size is already large - reduce result set size
Reduce your SELECT DISTINCT queries without LIMIT clauses

Настройки my.cnf :

# The following options will be passed to all MySQL clients
[client]
#password = your_password
port = 3306
socket = /var/lib/mysql/mysql.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
skip-locking
skip-bdb
key_buffer_size = 1024M
max_allowed_packet = 2M
table_cache = 2000
open_files_limit = 4000
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K
thread_cache_size = 4
max_heap_table_size = 512M
tmp_table_size = 1024M
innodb_additional_mem_pool_size = 20M


#
# * Query Cache Configuration
#
query_cache_limit = 8M
query_cache_size = 1024M

#skip-networking
server-id = 1

# Uncomment the following if you want to log updates
#log-bin=mysql-bin

# Disable Federated by default
skip-federated


[mysqldump]
quick
max_allowed_packet = 32M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[isamchk]
key_buffer = 8M
sort_buffer_size = 8M

[myisamchk]
key_buffer = 8M
sort_buffer_size = 8M

[mysqlhotcopy]
interactive-timeout
edogs software
На сайте с 15.12.2005
Offline
775
#1

max_heap_table_size = 512M

tmp_table_size = 1024M

эти значения в 99% должны быть одинаковы, попробуйте поставить 1024M и там и там или даже увеличить до 1536M , если свободной памяти много (мускул и так у Вас больше 50% жрет)

key_buffer_size = 1024M

хватит и 128M, у Вас все индексы не больше 50

sort_buffer_size = 64K

попробуйте поднять до 256K

table_cache = 2000

Исходя из тюнера - достаточно и 1000 вполне

или даже

sort_buffer_size = 64K

read_buffer_size = 256K

read_rnd_buffer_size = 256K

все 3 значения поподнимать потихоньку (без лишнего энтузиазма), 256K => 384K => 512K и посмотреть на результат.

Вообще судя по Slow queries: 0% - у Вас не так все плохо, но если проблема есть (а не ради эстетства), то включите слоу_квери_лог и посмотрите какие запросы тормозят, и попробуйте их как раз и оптимизировать. Одними настройками my.cnf не всегда можно решить вопрос полностью.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
iamsens
На сайте с 26.08.2009
Offline
115
#2

какой неверный подход к оптимизации СУБД

нужно смотреть запросы и из этого исходить, какие параметры подымать

использовании временных таблиц - это плохой тон!

N
На сайте с 06.05.2007
Offline
419
#3
Alexey85:
зашел в тупик никак не могу побороть строку
[!!] Temporary tables created on disk: 26% (97 on disk / 365 total)

Не надо ее бороть. Это особенность исполнения некоторых типов запросов. mysqltuner не может отличить вынужденные создания маленьких файлов на диске и случаи, когда не хватает памяти.

Увеличивай параметр и следи за динамикой изменения показателя. Если перестал улучшаться - дальше смысла нет гнать. Если грубо, то пожалуй на 64мб можно уже остановиться.

Вот перетащить временный каталог /tmp в tmpfs имеет смысл.

Кнопка вызова админа ()
I
На сайте с 23.12.2010
Offline
25
#4
iamsens:

использовании временных таблиц - это плохой тон!

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

во-первых, временные таблицы сервер постоянно создает сам - если запрос чуть сложнее чем select * from table

во-вторых, использование промежуточных временных таблиц обычно ускоряет выполнение сложных запросов - все-таки компилятор SQL весьма далек от совершенства и зачастую приходится ему помогать, как раз через создание промежуточных временных таблиц

Andreyka
На сайте с 19.02.2005
Offline
822
#5

Это симптомы кривого движка, программист которого не утруждал себя оптимизацией запросов к SQL.

Тюнингом ничего не сделать - надо править запросы.

Не стоит плодить сущности без необходимости
0
На сайте с 11.10.2008
Offline
26
#6
edogs:
tmp_table_size = 1024M
эти значения в 99% должны быть одинаковы, попробуйте поставить 1024M и там и там или даже увеличить до 1536M

Ни в коем случае не следуйте этому совету, разве что у вас хранилище на десятки САС дисков, огромный кеш на запись и фиброй оно включено прямо в сервер. При работе с такого объема временными файлами у вас просядет сервер по производительности так, что вы не поймете в чем дело. Разбираться в первую очередь с запросами (особенно с select * from...), индексами, джойнами, форинкеями. Поставьте ограничение на количество записей в выборке (max_join_size) и смотрите в ошибки - выясняйте какой запрос убивает базу (возможна рекурсия или неправильное связывание таблиц).

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