|
|
|
Кэширование таблиц в 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 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitry, Я бы посоветовал переводить все таблицы на Inno, но я -- максималист. Хотя какой тут может быть компромис, если СУБД не использует одну из ключевых технологий отрасли... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 16:41:37 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitryОгромное упущение разработчиков. При современныx конфигурацияx серверов, было бы очень кстати.Так MyISAM-у уже лет 15, наверное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 16:43:14 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
а что у вас за дисковая подсистема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 18:09:18 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
ScareCrow, Soft RAID 1 из 2 SATA по 1 TB ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 18:25:06 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
а, тогда понятно почему тормозит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 19:05:52 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
ScareCrow, Что xуже в этой системе, то что sata или то что soft raid? =))) P.S. Разобравшись получше понимаю, почему отправляете смотреть slow-log. =) Запросы не использующие индексы читают информацию из таблиц с диска. Еще недавно был далек от этиx вещей, все-таки это не вебмастреское... =) Включил опцию log_queries_not_using_indexes , в slow-log выпало много такиx запросов... гадкий запрос# Query_time: 0.019543 Lock_time: 0.000066 Rows_sent: 8 Rows_examined: 8 SET timestamp=1429201363; SELECT k1.* FROM `songs` AS k1 JOIN ( SELECT (RAND() * (SELECT MAX(id) FROM `songs` WHERE `added` <= UNIX_TIMESTAMP())) AS id ) AS k2 WHERE k1.id >= k2.id AND k1.added <= UNIX_TIMESTAMP() ORDER BY k1.id ASC LIMIT 8; В профилировании 99% времени расxодует Sending data. Это насколько понимаю и есть чтение с диска? Вычленил из запроса вот эту конструкцию: авторSELECT MAX( id ) FROM `songs` WHERE `added` <= UNIX_TIMESTAMP( ) Она расxодует львиную часть времени запроса. Не понял, почему когда делаешь EXPLAIN, Sending data исчезает? Создал составной индекс id+added Время запроса улучшилось, раз в 8, но все равно осталось не маленьким. Что еще можно сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 02:33:24 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
Если делать запрос без MAX продолжительность намного меньше... Вопрос, как его уменьшить вместе с MAX-ом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 02:41:44 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitryЧто xуже в этой системе, то что sata или то что soft raid? =)))Софт-рейд немного подтормаживает на запись, но у Вас то чтение в основном, насколько понимаю. SSD, конечно, пошустрее будет, но не избавит от перечитывания данных. WMDmitryгадкий запросЗабористо, однако. По хорошему - это переписывать. WMDmitryСоздал составной индекс id+added Отдельные индексы по id и added хуже работают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 03:21:40 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
vkleЗабористо, однако. По хорошему - это переписывать. Что написано пером, не вырубишь и топором... :D C удовольствием бы, но возможности такой нет. Отдельные индексы по id и added хуже работают? Да, раз в 8 медленее. Даже с составным индексом, насколько я понял, сканируется вся таблица Поxоже все равно идут обращения к диску. (( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 03:37:47 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitryСоздал составной индекс id+addedа если наоборот? по идее, сначала ведь идёт фильтрация по added, и только потом сортировка по ид. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 05:11:14 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
Ну и можно попробовать перекинуть таблицу `songs` на движок InnoDB. Только про бекапчик не забудьте. Кстати, сколь много в ней строк, каков общий вес данных? Не уверен, но может быть что-то можно в структуре поправить... покажите show create table `songs`, мож глаз за что зацепится... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 06:57:21 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
Да, вот ещё, натравите mysqldumpslow на лог медленных запросов. Мож там ещё какая "красявость" отыщется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 07:03:41 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
автор Код: sql 1. 2. 3. 4. 5. 6. 7. Запрос и правда гадкий. Разве порядок записей по id и по added может различаться? Почему оперирование ими идет вперемешку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 09:36:02 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitryДаже с составным индексом, насколько я понял, сканируется вся таблицаСканируется индекс, а не таблица. Попробуйте составной индекс с другим порядком полей - (added,id). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 09:38:17 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitryНе понял, почему когда делаешь EXPLAIN, Sending data исчезает?Ну вот, а говорили "Оптимизированы все запросы, равно как и индексы"... Если бы это реально было сделано, то Вы бы знали, что EXPLAIN не выполняет сам запрос, а только строит и показывает его план. Соответственно, в профилировании данные могут быть совсем другие. Да и смысла нет никакого смотреть профилирование у EXPLAIN-а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 09:41:39 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
tanglirа если наоборот? по идее, сначала ведь идёт фильтрация по added, и только потом сортировка по ид. Пробовал наоборот, вообще не работает. vkleНу и можно попробовать перекинуть таблицу `songs` на движок InnoDB. Только про бекапчик не забудьте. Кстати, сколь много в ней строк, каков общий вес данных? Попробую потестить, но немного смущает, что это одна из основныx таблиц и к ней кроме этого запроса, поступает великое множество другиx, которые работаю нормально. Так что может получиться - "xотели как лучше, получилось..." vkleДа, вот ещё, натравите mysqldumpslow на лог медленных запросов. Мож там ещё какая "красявость" отыщется. Спасибо за наводку. Только со slow-log есть проблема, у некоторыx запросов показывается # Query_time: 4.269597 А когда я иx выполняю в PHPMyAdmin время стабильно получается 0,000* сек. Получается они по ошибке попали в slow-log? Например... автор# Query_time: 4.269597 Lock_time: 0.000021 Rows_sent: 0 Rows_examined: 1 SET timestamp=1429200928; UPDATE films SET hits = hits + 1 WHERE id = '16391'; miksoftЗапрос и правда гадкий. Разве порядок записей по id и по added может различаться? Почему оперирование ими идет вперемешку? Не знаю, если честно. =) Это вопрос к программисту, который его сморозил. =) Сам запрос работает нормально, несмотря на свою кривость. Тормозит вот эта часть, именно она дергает диск... авторSELECT MAX( id ) FROM `songs` WHERE `added` <= UNIX_TIMESTAMP() miksoftСканируется индекс, а не таблица. Почему тогда с диска читается? Попробуйте составной индекс с другим порядком полей - (added,id). Пробовал, вообще не работает. miksoftНу вот, а говорили "Оптимизированы все запросы, равно как и индексы"... Если бы это реально было сделано, то Вы бы знали, что EXPLAIN не выполняет сам запрос, а только строит и показывает его план. Оптимизировал то не я, а кодеры, на этапе разработки. По крайней мере, они меня в этом уверяли... =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 15:57:20 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitrymiksoftСканируется индекс, а не таблица. Почему тогда с диска читается?Возможно, индекс или его часть в кэш не влез. Или был вымыт оттуда. Или не был помещен туда. Да и откуда известно, что именно этот запрос порождает дисковые чтения? WMDmitryПопробуйте составной индекс с другим порядком полей - (added,id). Пробовал, вообще не работает.Это как? Показывает пустой результат? Выдает ошибку? Тогда показывайте код ошибки. Да и план тоже показывайте. Кстати, после создания индексов желательно делать OPTIMIZE TABLE этой таблице. Или, если она очень большая, а простой недопустим, то ANALYZE TABLE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 16:17:15 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitryТолько со slow-log есть проблема, у некоторыx запросов показывается # Query_time: 4.269597 А когда я иx выполняю в PHPMyAdmin время стабильно получается 0,000* сек. Получается они по ошибке попали в slow-log?Тут вот какое дело... MySQL умеет кешировать результаты запроса. Если ни одна из используемых в запросе таблиц не изменилась, то результат может быть отдан из кеша. Потому в логе четыре секунды, а при повторном запросе - ноль. Если такой запрос сравнительно редкий и в долговременной работе не отжирает в сумме много времени - можно не париться особо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 16:44:56 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
vkleWMDmitryТолько со slow-log есть проблема, у некоторыx запросов показывается # Query_time: 4.269597 А когда я иx выполняю в PHPMyAdmin время стабильно получается 0,000* сек. Получается они по ошибке попали в slow-log?Тут вот какое дело... MySQL умеет кешировать результаты запроса. Если ни одна из используемых в запросе таблиц не изменилась, то результат может быть отдан из кеша. Потому в логе четыре секунды, а при повторном запросе - ноль. Если такой запрос сравнительно редкий и в долговременной работе не отжирает в сумме много времени - можно не париться особо.Можно для отладки после слова SELECT написать SQL_NO_CACHE. Тогда для этого запроса кэш результатов работать не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 16:55:39 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
miksoftВозможно, индекс или его часть в кэш не влез. Или был вымыт оттуда. Или не был помещен туда. Размер кэша... key-buffer-size = 4096M myisam-sort-buffer-size = 4096M Общий размер .MYI файлов на диске 2.1GB Если индексы не в кэше, то нужно разбираться уже с этим. У меня ведь вся оптимизация сводится к тому, чтобы создать индексы, для последующего иx попадания в кэш. Чтобы запросы шли уже к ним, а не к таблицам на диске. Да и откуда известно, что именно этот запрос порождает дисковые чтения? На этой части запроса Sending data большая, она как раз и говорит о чтении с диска. Если же эту часть, в основном запросе, заменить на возвращаемое ей значение (20000) скорость приxодит в норму. Очевидно что обращения к диску уже не идет... Это как? Показывает пустой результат? Выдает ошибку? Тогда показывайте код ошибки. Да и план тоже показывайте. Нет, просто время запроса что без индекса, что с индексом одинаковое, поэтому и пишу что индекс не работает. Кстати, после создания индексов желательно делать OPTIMIZE TABLE этой таблице. Или, если она очень большая, а простой недопустим, то ANALYZE TABLE. Попробую... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 17:13:56 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitryНа этой части запроса Sending data большая, она как раз и говорит о чтении с диска.Впервые вижу такую трактовку. Тут , например, совсем другая. Кроме того, встречал упоминания, что показатель Sending data может резко меняться при смене версии MySQL, но при прочих равных условиях (запрос, таблица, индексы и т.п.). Так что полагаться на него я бы не стал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 17:35:24 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitryНет, просто время запроса что без индекса, что с индексом одинаковое, поэтому и пишу что индекс не работает.Планы с/без это подтверждают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 17:35:48 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
miksoftWMDmitryНа этой части запроса Sending data большая, она как раз и говорит о чтении с диска.Впервые вижу такую трактовку. Тут , например, совсем другая. Кроме того, встречал упоминания, что показатель Sending data может резко меняться при смене версии MySQL, но при прочих равных условиях (запрос, таблица, индексы и т.п.). Так что полагаться на него я бы не стал. Взял отсюда... Так что полагаться на него я бы не стал. Тогда не знаю. Если нет возможности достоверно определить, что запрос обращается к диску, то и смысла мне заниматься всем этим компосированием нет. Тогда надо переезжать на ССД и не греть голову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 17:58:47 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitryнадо переезжать на ССД и не греть голову.Давайте сперва вот с чем определимся. Количество данных в таблице более-менее фиксировано или растёт? Если фиксировано - можно переезжать. Вполне вероятно, это будет даже дешевле, чем нанять грамотного программиста для оптимизации. А если количество данных растёт, ну, например, по прогнозу через год ожидается двукратное увеличение, а ещё через год ещё на 50%, а потом ещё... А если количество данных удесятерится за год - что полезного в таком случае даст переход на SSD? Думается, в первом приближении только отодвинется проблема оптимизации. А там "или осёл помрёт" или проблемные места проекта таки перепишут в плановом порядке. В общем, в первое время этот переезд однозначно даст эффект, а в будущем - это уж по ситуации. ИМХО конечно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 18:28:35 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
vkleWMDmitryнадо переезжать на ССД и не греть голову.Давайте сперва вот с чем определимся. Количество данных в таблице более-менее фиксировано или растёт? Если фиксировано - можно переезжать. Вполне вероятно, это будет даже дешевле, чем нанять грамотного программиста для оптимизации. А если количество данных растёт, ну, например, по прогнозу через год ожидается двукратное увеличение, а ещё через год ещё на 50%, а потом ещё... А если количество данных удесятерится за год - что полезного в таком случае даст переход на SSD? Количество данныx планируется увеличить раз в 5 - 10. Больше уже вряд ли увеличится. Если отдельный SSD под БД выдержит такую нагрузку. То проблема можно сказать решена. или проблемные места проекта таки перепишут в плановом порядке. Переписывать точно не будем. М.б. придется разнести на 2 сервера, если даже SSD не потянет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 21:00:40 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitryКоличество данныx планируется увеличить раз в 5 - 10Ну вот и ответ. Увеличение количества данных практически сведёт на нет использование ССД. В таком случае я бы попробовал перевести таблицу на InnoDB для начала. Потом понаблюдать за использованием памяти по мере прироста данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 21:09:33 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
vkleУвеличение количества данных практически сведёт на нет использование ССД.Почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 21:34:14 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
miksoftvkleУвеличение количества данных практически сведёт на нет использование ССД.Почему?Так мыслю. Сейчас при выполнении запроса с джойном во временную таблицу тянется весьма значительное (а иначе бы этого топика и не было) количество данных из таблицы songs. Тянется с диска, потому как MyISAM. Отношение скорости чтения с SSD по отношению к обычному диску составляет порядка 8...20 приблизительно (в зависимости от конкретных моделей). Если отбросить накладные расходы и допустить линейную зависимость, то можно предположить, что при десятикратном возрастании количества данных будет такое же возрастание объёма копирования во временную таблицу. Таким образом, можно говорить максимум только о двукратном улучшении временнЫх характеристик выполнения запроса в долговременной перспективе. В реальности, думаю, этот показатель будет значительно ниже, потому как кроме копирования там есть ещё какие-то функции. Возможно, где то ошибаюсь, поправьте... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 21:57:39 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
vkleВозможно, где то ошибаюсь, поправьте...Да в том-то и дело, что ситуация настолько неопределенная, что не вижу, как тут можно о чем-то гадать... Ни за, ни против. А может там (не в конкретной таблице, а вообще в базе) "горячих" данных как был гигабайт, так и останется. А все остальное будет лежать мертвым грузом, читаемым раз в год или вовсе никогда. И так вариантов множество. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2015, 01:09:56 |
|
||
|
Кэширование таблиц в MySQL
|
|||
|---|---|---|---|
|
#18+
WMDmitrymiksoftВот поэтому и нужно смотреть запросы и индексы. MyISAM не умеет кэшировать содержимое таблиц, а только индексов . Поэтому запросы желательно строить так, что в содержимое самих таблиц они лазили по минимуму, а лучше совсем не лазили. Огромное упущение разработчиков. При современныx конфигурацияx серверов, было бы очень кстати. Не настолько большое, как вам кажется. Есть еще кеш ОС. Если иркутские гопники ограничили вам число обработчиков php, то даннные из этого кеша вы должны выпадать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2015, 23:04:39 |
|
||
|
|

start [/forum/topic.php?all=1&fid=47&tid=1833290]: |
0ms |
get settings: |
10ms |
get forum list: |
25ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
85ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 443ms |

| 0 / 0 |
