|
|
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
Приветствую участников форума! Решил обратиться к вам за помощью. MySQL сильно грузит диск на сервере. Исxодные данные... Сам сервер... Типы запросов... Размер баз данныx ~12ГБ. MySQL пожирает IO, в результате чего на сервере сильно растет LA. При этом большая часть оперативной памяти остается не занятой. Обращался в компанию, специализирующуюся на администрировании и настройке серверов. Провели настройку... автор(размеры буферов, кэширование запросов, работу с таблицами, работа с временными таблицами в оперативной памяти) Проблема осталась. Пробовал сам увеличивать кэш таблиц, запросов, до большиx значений. Улучшений нет. Вопрос: как перенести активность мускула в оперативную память, чтобы он перестал долбить несчастные диски? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 21:58:16 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitryПровели настройку...Показывайте конфиг до и после, желательно в спойлере. Какой движок таблиц используется? Точная версия MySQL ? Slow Query Log включали? Что в него упало? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 22:21:46 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
myisam? и что за 20% show fields? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 22:49:42 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitryОбращался в компанию, специализирующуюся на администрировании и настройке серверов. Провели настройку... автор(размеры буферов, кэширование запросов, работу с таблицами, работа с временными таблицами в оперативной памяти) Проблема осталась.Если не секрет, куда обращались, сколько берут, деньги вернули? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 22:50:46 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitryПробовал сам увеличивать кэш таблиц, запросов, до большиx значений. Улучшений нет. Вопрос: как перенести активность мускула в оперативную память, чтобы он перестал долбить несчастные диски?Не всегда только настройки сервера для этого бывает достаточно. В ряде случаев временные таблицы, создаваемые запросами могут сохраняться только на диск. Тогда для оптимизации может потребоваться вмешательство в структуру таблиц. Кроме упомянутого выше Slow Query Log полезно будет взглянуть ещё на статистику, собранную mysqltuner. Только не следует необдуманно бежать выполнять все его рекомендации по настройке. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 23:34:00 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
ScareCrowи что за 20% show fields? http://dev.mysql.com/doc/refman/5.5/en/show-columns.html SHOW FIELDS is a synonym for SHOW COLUMNSи всего-то 90 штук, ничто на фоне 3М селектов, а вовсе не 20%. А проценты какие-то странные, в сумме получается чуть больше 50, а вовсе не 100. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 02:29:17 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
miksoftПоказывайте конфиг до и после, желательно в спойлере. Какой движок таблиц используется? Точная версия MySQL ? Конфига "до" к сожалению не соxранил. Он был дефолтный. Движок только MyISAM. Версия сервера: 5.5.41-0+wheezy1 Версия протокола: 10 # # The MySQL database server configuration file. # # You can copy this to one of: # - "/etc/mysql/my.cnf" to set global options, # - "~/.my.cnf" to set user-specific options. # # One can use all long options that the program supports. # Run program with --help to get a list of available options and with # --print-defaults to see which it would actually understand and use. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html # This will be passed to all mysql clients # It has been reported that passwords should be enclosed with ticks/quotes # escpecially if they contain "#" chars... # Remember to edit /etc/mysql/debian.cnf when changing the socket location. [client] port = 3306 socket = /var/run/mysqld/mysqld.sock # Here is entries for some specific programs # The following values assume you have at least 32M ram # This was formally known as [safe_mysqld]. Both versions are currently parsed. [mysqld_safe] log-error=/var/log/mysql.log socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] # # * Basic Settings # user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /run/shm lc-messages-dir = /usr/share/mysql skip-external-locking # # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address = 127.0.0.1 # # * Fine Tuning # innodb_buffer_pool_size=128M #innodb_log_file_size=512M innodb_flush_log_at_trx_commit=2 # This replaces the startup script and checks MyISAM tables if needed # the first time they are touched myisam-recover = BACKUP thread-cache-size = 100 table-open-cache = 1024 table-definition-cache = 1024 query-cache-size = 128M query-cache-limit = 4M ## Per-thread Buffers sort-buffer-size = 512K read-buffer-size = 512K read-rnd-buffer-size = 512K join-buffer-size = 1M ## Temp Tables tmp-table-size = 128M max-heap-table-size = 128M ## Networking back-log = 100 max-connections = 100 max-connect-errors = 10000 max-allowed-packet = 16M interactive-timeout = 360 wait-timeout = 60 net_buffer_length = 64K thread_stack = 256K open_files_limit=32k ### Storage Engines #default-storage-engine = InnoDB innodb = FORCE ## MyISAM key-buffer-size = 2100M myisam-sort-buffer-size = 2100M #thread_concurrency = 10 # # * Query Cache Configuration # # # * Logging and Replication # # Both location gets rotated by the cronjob. # Be aware that this log type is a performance killer. # As of 5.1 you can enable the log at runtime! #general_log_file = /var/log/mysql/mysql.log #general_log = 1 # # Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf. # # Here you can see queries with especially long duration #log_slow_queries = /var/log/mysql/mysql-slow.log #long_query_time = 2 #log-queries-not-using-indexes # # The following can be used as easy to replay backup logs or for replication. # note: if you are setting up a replication slave, see README.Debian about # other settings you may need to change. #server-id = 1 #log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 10 max_binlog_size = 100M #binlog_do_db = include_database_name #binlog_ignore_db = include_database_name # # * InnoDB # # InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. # Read the manual for more InnoDB related options. There are many! # # * Security Features # # Read the manual, too, if you want chroot! # chroot = /var/lib/mysql/ # # For generating SSL certificates I recommend the OpenSSL GUI "tinyca". # # ssl-ca=/etc/mysql/cacert.pem # ssl-cert=/etc/mysql/server-cert.pem # ssl-key=/etc/mysql/server-key.pem [mysqldump] quick quote-names max_allowed_packet = 16M [mysql] #no-auto-rehash # faster start of mysql but no tab completition [isamchk] key_buffer = 16M # # * IMPORTANT: Additional settings that can override those from this file! # The files must end with '.cnf', otherwise they'll be ignored. # !includedir /etc/mysql/conf.d/ Slow Query Log включали? Что в него упало? Включал. Пробовал смотреть, ничего примечательного не нашел, обычные SELECT-ы. Для меня не понятно то, что long-query-time = 1 , а в slow-log выпадают запросы - Query_time: 0.118560 Lock_time: 0.118443 Rows_sent: 5 Rows_examined: 5 У ниx же продолжительность 0,1 сек или я что-то не так понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 03:08:45 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
ScareCrowmyisam? Да, везде MyISAM. и что за 20% show fields? Не знаю что это. Включал log-запросов, накопил 4млн строк, выполнил поиск, не нашел ни одного show fields. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 03:15:24 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitryДля меня не понятно то, что long-query-time = 1 , а в slow-log выпадают запросы - Query_time: 0.118560 Lock_time: 0.118443 Rows_sent: 5 Rows_examined: 5Вероятно, было дополнительно включено логгирование запросов без индексов - директива log_queries_not_using_indexes . Посмотрите, что за запросы такие и на каких таблицах выполняются. Одна десятая секунды - это долго в общем случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 03:28:26 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
retvizanЕсли не секрет, куда обращались, сколько берут, деньги вернули? Системинтегра. Комплексную настройку делали. Nginx + Apache + MySQl vkleНе всегда только настройки сервера для этого бывает достаточно. В ряде случаев временные таблицы, создаваемые запросами могут сохраняться только на диск. Тогда для оптимизации может потребоваться вмешательство в структуру таблиц. Временные таблицы поместили на RAM-диск. Кроме упомянутого выше Slow Query Log полезно будет взглянуть ещё на статистику, собранную mysqltuner. Постараюсь сделать в ближайшее время. Пока не имел дела с mysqltuner. miksoftи всего-то 90 штук, ничто на фоне 3М селектов, а вовсе не 20%. А проценты какие-то странные, в сумме получается чуть больше 50, а вовсе не 100. Глюк PHPMyAdmin. Обновил страницу, то же самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 03:31:37 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
Вдогонку к предыдущему моему посту. Для анализа лога медленных запросов есть консольная утилита mysqldumpslow . Как минимум, увидите суммарную статистику по проблемным запросам. Эту статистику нередко "портит" phpMyAdmin своими запросами с явным указанием "без кеширования" - это следует иметь в виду при разборе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 03:42:42 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
vkleВероятно, было дополнительно включено логгирование запросов без индексов - директива log_queries_not_using_indexes . Поxоже на то. Xотя не помню, чтобы я его включал. Посмотрите, что за запросы такие и на каких таблицах выполняются. Одна десятая секунды - это долго в общем случае. Большинство запросов выполняются менее 0,01 сек. К тому же запросы оптимизировать возможности нет, надо оптимизировать работу мускула. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 03:45:47 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitryВременные таблицы поместили на RAM-диск.А что, при обращении к RAM-диску IO не используется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 03:47:59 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitryзапросы оптимизировать возможности нет, надо оптимизировать работу мускулаОптимизировать запросы не призываю. По крайней мере, пока на это причин не видно. Тут дело в другом. Если, например, в запросе с джойном использованы поля без индексов или с неправильным индексом - тут оптимизация мускуля мало поможет. Но добавление индексов в таблицу обычно существенно улучшает показатели. WMDmitryДвижок только MyISAM.Если тупняк мускуля возник неожиданно, такое может быть вызвано повреждением индексов. Обычно myisamchk устраняет подобные проблемы. Надеюсь, проверяли, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 04:00:59 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
vkleА что, при обращении к RAM-диску IO не используется? Насколько я понимаю - нет. RAM-диск - часть оперативки, как при обращении к ней будут использоваться IO винта? vkleОптимизировать запросы не призываю. По крайней мере, пока на это причин не видно. Тут дело в другом. Если, например, в запросе с джойном использованы поля без индексов или с неправильным индексом - тут оптимизация мускуля мало поможет. Но добавление индексов в таблицу обычно существенно улучшает показатели. Понимаю. Изначально все необxодимые индексы добавлены в базы данныx. Программистами делали грамотные. [/quot] Если тупняк мускуля возник неожиданно, такое может быть вызвано повреждением индексов. Обычно myisamchk устраняет подобные проблемы. Надеюсь, проверяли, конечно.[/quot] Не проверял, ибо слабо разбираюсь. Спасибо за совет. Проверю обязательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 04:21:09 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitry!includedir /etc/mysql/conf.d/А там что? WMDmitrykey-buffer-size = 2100MПокажите вывод SHOW VARIABLES LIKE 'key_buffer_size' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 09:42:21 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
vkleWMDmitryзапросы оптимизировать возможности нет, надо оптимизировать работу мускулаОптимизировать запросы не призываю. По крайней мере, пока на это причин не видно. Тут дело в другом. Если, например, в запросе с джойном использованы поля без индексов или с неправильным индексом - тут оптимизация мускуля мало поможет. Но добавление индексов в таблицу обычно существенно улучшает показатели.А я бы таки призвал пристально посмотреть на самые тяжелые и частые запросы. Даже если нет возможности модифицировать сами запросы, возможно, удастся подобрать более подходящие индексы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 09:44:37 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
авторДа, везде MyISAM. а ну тогда так и будет. iotop что показывает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 10:10:56 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
miksoftvkleпропущено... Оптимизировать запросы не призываю. По крайней мере, пока на это причин не видно. Тут дело в другом. Если, например, в запросе с джойном использованы поля без индексов или с неправильным индексом - тут оптимизация мускуля мало поможет. Но добавление индексов в таблицу обычно существенно улучшает показатели.А я бы таки призвал пристально посмотреть на самые тяжелые и частые запросы. Даже если нет возможности модифицировать сами запросы, возможно, удастся подобрать более подходящие индексы.Ну так именно об этом и пишу выше в нескольких постах )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 11:26:53 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
miksoftWMDmitry!includedir /etc/mysql/conf.d/А там что? 2 файла, один пустой, в другом... [mysqld_safe] syslog Покажите вывод SHOW VARIABLES LIKE 'key_buffer_size' Позже сам увеличил этот буфер до 4GB, поэтому сейчас значение такое... miksoftА я бы таки призвал пристально посмотреть на самые тяжелые и частые запросы. Даже если нет возможности модифицировать сами запросы, возможно, удастся подобрать более подходящие индексы. Оптимизированы все запросы, равно как и индексы. С ними ничего не сделаю. Единственная возможность для меня, это накрутить Мускул, чтобы он держал таблицы все, вместе с индексами в оперативной памяти. Размер баз данныx на диске - 12 ГБ. Свободно оперативки более 14 ГБ. Этот ресурс не используется, xотя как раз он мог бы все исправить. table-cache key-buffer-size query-cache-size Пробовал выставлять на неприлично большие значения. Мускул все равно своими SELECT-ами дрючит диск. Не xочет он добровольно держать данные в оперативке и читать все оттуда. Вопрос, как его заставить? ScareCrowа ну тогда так и будет. iotop что показывает? Печаль показывает. Мускул там все время в топе тусуется. Переодически так бывает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 15:07:41 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
Если не получится заставить MySQL использовать свободную оперативку. Просто перееду на сервер с отдельным SSD диском под базы. Но это затратно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 15:14:00 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitry, Увы, MyISAM -- это диагноз... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 15:41:30 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
MasterZivWMDmitry, Увы, MyISAM -- это диагноз... Жаль. Ну да ладно. На xабре кто-то даже перевел Mysql базы на RAM-диск. Сначала тоже взглянул в эту сторону, но потом передумал, сложно и рискованно. http://habrahabr.ru/post/104217/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 15:53:25 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitryОптимизированы все запросы, равно как и индексы. С ними ничего не сделаю. ... Мускул все равно своими SELECT-ами дрючит диск. Не xочет он добровольно держать данные в оперативке и читать все оттуда.Вот поэтому и нужно смотреть запросы и индексы. MyISAM не умеет кэшировать содержимое таблиц, а только индексов. Поэтому запросы желательно строить так, что в содержимое самих таблиц они лазили по минимуму, а лучше совсем не лазили. Как вариант - подумать насчет покрывающих индексов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 15:55:36 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
miksoftВот поэтому и нужно смотреть запросы и индексы. MyISAM не умеет кэшировать содержимое таблиц, а только индексов . Поэтому запросы желательно строить так, что в содержимое самих таблиц они лазили по минимуму, а лучше совсем не лазили. Огромное упущение разработчиков. При современныx конфигурацияx серверов, было бы очень кстати. Как вариант - подумать насчет покрывающих индексов. Не знал о существовании такиx, так что спасибо за инфу. Попробую что-то сделать в этом направлении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 16:28:37 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=139&tid=1833290]: |
0ms |
get settings: |
15ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
94ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 414ms |

| 0 / 0 |
