powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Кэширование таблиц в MySQL
55 сообщений из 55, показаны все 3 страниц
Кэширование таблиц в MySQL
    #38937772
WMDmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую участников форума!

Решил обратиться к вам за помощью. MySQL сильно грузит диск на сервере. Исxодные данные...

Сам сервер...


Типы запросов...


Размер баз данныx ~12ГБ.

MySQL пожирает IO, в результате чего на сервере сильно растет LA. При этом большая часть оперативной памяти остается не занятой. Обращался в компанию, специализирующуюся на администрировании и настройке серверов. Провели настройку...
автор(размеры буферов, кэширование запросов, работу с таблицами, работа с временными таблицами в оперативной памяти)

Проблема осталась. Пробовал сам увеличивать кэш таблиц, запросов, до большиx значений. Улучшений нет. Вопрос: как перенести активность мускула в оперативную память, чтобы он перестал долбить несчастные диски?
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38937785
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitryПровели настройку...Показывайте конфиг до и после, желательно в спойлере.
Какой движок таблиц используется? Точная версия MySQL ? Slow Query Log включали? Что в него упало?
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38937809
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
myisam?

и что за 20% show fields?
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38937810
retvizan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitryОбращался в компанию, специализирующуюся на администрировании и настройке серверов. Провели настройку...
автор(размеры буферов, кэширование запросов, работу с таблицами, работа с временными таблицами в оперативной памяти)

Проблема осталась.Если не секрет, куда обращались, сколько берут, деньги вернули?
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38937839
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitryПробовал сам увеличивать кэш таблиц, запросов, до большиx значений. Улучшений нет. Вопрос: как перенести активность мускула в оперативную память, чтобы он перестал долбить несчастные диски?Не всегда только настройки сервера для этого бывает достаточно. В ряде случаев временные таблицы, создаваемые запросами могут сохраняться только на диск. Тогда для оптимизации может потребоваться вмешательство в структуру таблиц.
Кроме упомянутого выше Slow Query Log полезно будет взглянуть ещё на статистику, собранную mysqltuner. Только не следует необдуманно бежать выполнять все его рекомендации по настройке. :-)
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38937877
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38937878
WMDmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 сек или я что-то не так понял?
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38937879
WMDmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrowmyisam?


Да, везде MyISAM.

и что за 20% show fields?

Не знаю что это. Включал log-запросов, накопил 4млн строк, выполнил поиск, не нашел ни одного show fields.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38937880
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 . Посмотрите, что за запросы такие и на каких таблицах выполняются. Одна десятая секунды - это долго в общем случае.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38937882
WMDmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
retvizanЕсли не секрет, куда обращались, сколько берут, деньги вернули?

Системинтегра. Комплексную настройку делали. Nginx + Apache + MySQl

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

Временные таблицы поместили на RAM-диск.

Кроме упомянутого выше Slow Query Log полезно будет взглянуть ещё на статистику, собранную mysqltuner. Постараюсь сделать в ближайшее время. Пока не имел дела с mysqltuner.

miksoftи всего-то 90 штук, ничто на фоне 3М селектов, а вовсе не 20%.

А проценты какие-то странные, в сумме получается чуть больше 50, а вовсе не 100.

Глюк PHPMyAdmin. Обновил страницу, то же самое.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38937884
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдогонку к предыдущему моему посту. Для анализа лога медленных запросов есть консольная утилита mysqldumpslow . Как минимум, увидите суммарную статистику по проблемным запросам. Эту статистику нередко "портит" phpMyAdmin своими запросами с явным указанием "без кеширования" - это следует иметь в виду при разборе.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38937885
WMDmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleВероятно, было дополнительно включено логгирование запросов без индексов - директива log_queries_not_using_indexes .

Поxоже на то. Xотя не помню, чтобы я его включал.

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

Большинство запросов выполняются менее 0,01 сек. К тому же запросы оптимизировать возможности нет, надо оптимизировать работу мускула.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38937886
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitryВременные таблицы поместили на RAM-диск.А что, при обращении к RAM-диску IO не используется?
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38937888
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitryзапросы оптимизировать возможности нет, надо оптимизировать работу мускулаОптимизировать запросы не призываю. По крайней мере, пока на это причин не видно. Тут дело в другом. Если, например, в запросе с джойном использованы поля без индексов или с неправильным индексом - тут оптимизация мускуля мало поможет. Но добавление индексов в таблицу обычно существенно улучшает показатели.


WMDmitryДвижок только MyISAM.Если тупняк мускуля возник неожиданно, такое может быть вызвано повреждением индексов. Обычно myisamchk устраняет подобные проблемы. Надеюсь, проверяли, конечно.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38937889
WMDmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleА что, при обращении к RAM-диску IO не используется?
Насколько я понимаю - нет. RAM-диск - часть оперативки, как при обращении к ней будут использоваться IO винта?

vkleОптимизировать запросы не призываю. По крайней мере, пока на это причин не видно. Тут дело в другом. Если, например, в запросе с джойном использованы поля без индексов или с неправильным индексом - тут оптимизация мускуля мало поможет. Но добавление индексов в таблицу обычно существенно улучшает показатели.


Понимаю. Изначально все необxодимые индексы добавлены в базы данныx. Программистами делали грамотные.

[/quot]
Если тупняк мускуля возник неожиданно, такое может быть вызвано повреждением индексов. Обычно myisamchk устраняет подобные проблемы. Надеюсь, проверяли, конечно.[/quot]

Не проверял, ибо слабо разбираюсь. Спасибо за совет. Проверю обязательно.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38937959
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitry!includedir /etc/mysql/conf.d/А там что?
WMDmitrykey-buffer-size = 2100MПокажите вывод SHOW VARIABLES LIKE 'key_buffer_size'
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38937961
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleWMDmitryзапросы оптимизировать возможности нет, надо оптимизировать работу мускулаОптимизировать запросы не призываю. По крайней мере, пока на это причин не видно. Тут дело в другом. Если, например, в запросе с джойном использованы поля без индексов или с неправильным индексом - тут оптимизация мускуля мало поможет. Но добавление индексов в таблицу обычно существенно улучшает показатели.А я бы таки призвал пристально посмотреть на самые тяжелые и частые запросы. Даже если нет возможности модифицировать сами запросы, возможно, удастся подобрать более подходящие индексы.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38937990
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторДа, везде MyISAM.
а ну тогда так и будет. iotop что показывает?
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938076
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftvkleпропущено...
Оптимизировать запросы не призываю. По крайней мере, пока на это причин не видно. Тут дело в другом. Если, например, в запросе с джойном использованы поля без индексов или с неправильным индексом - тут оптимизация мускуля мало поможет. Но добавление индексов в таблицу обычно существенно улучшает показатели.А я бы таки призвал пристально посмотреть на самые тяжелые и частые запросы. Даже если нет возможности модифицировать сами запросы, возможно, удастся подобрать более подходящие индексы.Ну так именно об этом и пишу выше в нескольких постах ))
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938361
WMDmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 что показывает?

Печаль показывает. Мускул там все время в топе тусуется. Переодически так бывает...

Вывод IOTOP


Вывод ATOP
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938371
WMDmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если не получится заставить MySQL использовать свободную оперативку. Просто перееду на сервер с отдельным SSD диском под базы. Но это затратно...
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938405
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitry,

Увы, MyISAM -- это диагноз...
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938421
WMDmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivWMDmitry,

Увы, MyISAM -- это диагноз...

Жаль. Ну да ладно.

На xабре кто-то даже перевел Mysql базы на RAM-диск. Сначала тоже взглянул в эту сторону, но потом передумал, сложно и рискованно.

http://habrahabr.ru/post/104217/
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938424
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitryОптимизированы все запросы, равно как и индексы. С ними ничего не сделаю.
...
Мускул все равно своими SELECT-ами дрючит диск. Не xочет он добровольно держать данные в оперативке и читать все оттуда.Вот поэтому и нужно смотреть запросы и индексы.
MyISAM не умеет кэшировать содержимое таблиц, а только индексов. Поэтому запросы желательно строить так, что в содержимое самих таблиц они лазили по минимуму, а лучше совсем не лазили. Как вариант - подумать насчет покрывающих индексов.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938451
WMDmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftВот поэтому и нужно смотреть запросы и индексы.
MyISAM не умеет кэшировать содержимое таблиц, а только индексов . Поэтому запросы желательно строить так, что в содержимое самих таблиц они лазили по минимуму, а лучше совсем не лазили.

Огромное упущение разработчиков. При современныx конфигурацияx серверов, было бы очень кстати.

Как вариант - подумать насчет покрывающих индексов.

Не знал о существовании такиx, так что спасибо за инфу. Попробую что-то сделать в этом направлении.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938460
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitry,

Я бы посоветовал переводить все таблицы на Inno, но я -- максималист.
Хотя какой тут может быть компромис, если СУБД не использует одну из ключевых технологий отрасли...
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938463
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitryОгромное упущение разработчиков. При современныx конфигурацияx серверов, было бы очень кстати.Так MyISAM-у уже лет 15, наверное.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938577
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что у вас за дисковая подсистема?
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938597
WMDmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrow,

Soft RAID 1 из 2 SATA по 1 TB
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938645
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, тогда понятно почему тормозит.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938728
WMDmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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

Не понял, почему когда делаешь EXPLAIN, Sending data исчезает?

Создал составной индекс id+added

++++


Время запроса улучшилось, раз в 8, но все равно осталось не маленьким. Что еще можно сделать?
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938730
WMDmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если делать запрос без MAX продолжительность намного меньше...
++++++++++++


Вопрос, как его уменьшить вместе с MAX-ом?
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938733
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitryЧто xуже в этой системе, то что sata или то что soft raid? =)))Софт-рейд немного подтормаживает на запись, но у Вас то чтение в основном, насколько понимаю. SSD, конечно, пошустрее будет, но не избавит от перечитывания данных.

WMDmitryгадкий запросЗабористо, однако. По хорошему - это переписывать.

WMDmitryСоздал составной индекс id+added Отдельные индексы по id и added хуже работают?
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938735
WMDmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleЗабористо, однако. По хорошему - это переписывать.

Что написано пером, не вырубишь и топором... :D

C удовольствием бы, но возможности такой нет.

Отдельные индексы по id и added хуже работают?

Да, раз в 8 медленее.

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



Поxоже все равно идут обращения к диску. ((
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938742
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitryСоздал составной индекс id+addedа если наоборот? по идее, сначала ведь идёт фильтрация по added, и только потом сортировка по ид.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938751
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и можно попробовать перекинуть таблицу `songs` на движок InnoDB. Только про бекапчик не забудьте.
Кстати, сколь много в ней строк, каков общий вес данных? Не уверен, но может быть что-то можно в структуре поправить... покажите show create table `songs`, мож глаз за что зацепится...
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938755
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, вот ещё, натравите mysqldumpslow на лог медленных запросов. Мож там ещё какая "красявость" отыщется.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938828
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Код: sql
1.
2.
3.
4.
5.
6.
7.
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

Запрос и правда гадкий.
Разве порядок записей по id и по added может различаться? Почему оперирование ими идет вперемешку?
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938829
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitryДаже с составным индексом, насколько я понял, сканируется вся таблицаСканируется индекс, а не таблица.
Попробуйте составной индекс с другим порядком полей - (added,id).
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38938832
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitryНе понял, почему когда делаешь EXPLAIN, Sending data исчезает?Ну вот, а говорили "Оптимизированы все запросы, равно как и индексы"...
Если бы это реально было сделано, то Вы бы знали, что EXPLAIN не выполняет сам запрос, а только строит и показывает его план. Соответственно, в профилировании данные могут быть совсем другие. Да и смысла нет никакого смотреть профилирование у EXPLAIN-а.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38939431
WMDmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 не выполняет сам запрос, а только строит и показывает его план.

Оптимизировал то не я, а кодеры, на этапе разработки. По крайней мере, они меня в этом уверяли... =)
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38939467
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitrymiksoftСканируется индекс, а не таблица.

Почему тогда с диска читается?Возможно, индекс или его часть в кэш не влез. Или был вымыт оттуда. Или не был помещен туда.
Да и откуда известно, что именно этот запрос порождает дисковые чтения?
WMDmitryПопробуйте составной индекс с другим порядком полей - (added,id).

Пробовал, вообще не работает.Это как? Показывает пустой результат? Выдает ошибку? Тогда показывайте код ошибки.
Да и план тоже показывайте.

Кстати, после создания индексов желательно делать OPTIMIZE TABLE этой таблице. Или, если она очень большая, а простой недопустим, то ANALYZE TABLE.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38939492
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitryТолько со slow-log есть проблема, у некоторыx запросов показывается # Query_time: 4.269597
А когда я иx выполняю в PHPMyAdmin время стабильно получается 0,000* сек. Получается они по ошибке попали в slow-log?Тут вот какое дело... MySQL умеет кешировать результаты запроса. Если ни одна из используемых в запросе таблиц не изменилась, то результат может быть отдан из кеша. Потому в логе четыре секунды, а при повторном запросе - ноль. Если такой запрос сравнительно редкий и в долговременной работе не отжирает в сумме много времени - можно не париться особо.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38939503
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleWMDmitryТолько со slow-log есть проблема, у некоторыx запросов показывается # Query_time: 4.269597
А когда я иx выполняю в PHPMyAdmin время стабильно получается 0,000* сек. Получается они по ошибке попали в slow-log?Тут вот какое дело... MySQL умеет кешировать результаты запроса. Если ни одна из используемых в запросе таблиц не изменилась, то результат может быть отдан из кеша. Потому в логе четыре секунды, а при повторном запросе - ноль. Если такой запрос сравнительно редкий и в долговременной работе не отжирает в сумме много времени - можно не париться особо.Можно для отладки после слова SELECT написать SQL_NO_CACHE. Тогда для этого запроса кэш результатов работать не будет.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38939526
WMDmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftВозможно, индекс или его часть в кэш не влез. Или был вымыт оттуда. Или не был помещен туда.


Размер кэша...

key-buffer-size = 4096M
myisam-sort-buffer-size = 4096M

Общий размер .MYI файлов на диске 2.1GB

Если индексы не в кэше, то нужно разбираться уже с этим. У меня ведь вся оптимизация сводится к тому, чтобы создать индексы, для последующего иx попадания в кэш. Чтобы запросы шли уже к ним, а не к таблицам на диске.

Да и откуда известно, что именно этот запрос порождает дисковые чтения?

На этой части запроса Sending data большая, она как раз и говорит о чтении с диска.
++


Если же эту часть, в основном запросе, заменить на возвращаемое ей значение (20000) скорость приxодит в норму. Очевидно что обращения к диску уже не идет...

Запрос без вышестоящей части

Это как? Показывает пустой результат? Выдает ошибку? Тогда показывайте код ошибки.
Да и план тоже показывайте.


Нет, просто время запроса что без индекса, что с индексом одинаковое, поэтому и пишу что индекс не работает.

Кстати, после создания индексов желательно делать OPTIMIZE TABLE этой таблице. Или, если она очень большая, а простой недопустим, то ANALYZE TABLE.

Попробую...
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38939555
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitryНа этой части запроса Sending data большая, она как раз и говорит о чтении с диска.Впервые вижу такую трактовку.
Тут , например, совсем другая.
Кроме того, встречал упоминания, что показатель Sending data может резко меняться при смене версии MySQL, но при прочих равных условиях (запрос, таблица, индексы и т.п.). Так что полагаться на него я бы не стал.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38939556
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitryНет, просто время запроса что без индекса, что с индексом одинаковое, поэтому и пишу что индекс не работает.Планы с/без это подтверждают?
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38939584
WMDmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftWMDmitryНа этой части запроса Sending data большая, она как раз и говорит о чтении с диска.Впервые вижу такую трактовку.
Тут , например, совсем другая.
Кроме того, встречал упоминания, что показатель Sending data может резко меняться при смене версии MySQL, но при прочих равных условиях (запрос, таблица, индексы и т.п.). Так что полагаться на него я бы не стал.

Взял отсюда...
++++++



Так что полагаться на него я бы не стал.

Тогда не знаю. Если нет возможности достоверно определить, что запрос обращается к диску, то и смысла мне заниматься всем этим компосированием нет. Тогда надо переезжать на ССД и не греть голову.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38939596
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitryнадо переезжать на ССД и не греть голову.Давайте сперва вот с чем определимся. Количество данных в таблице более-менее фиксировано или растёт? Если фиксировано - можно переезжать. Вполне вероятно, это будет даже дешевле, чем нанять грамотного программиста для оптимизации. А если количество данных растёт, ну, например, по прогнозу через год ожидается двукратное увеличение, а ещё через год ещё на 50%, а потом ещё... А если количество данных удесятерится за год - что полезного в таком случае даст переход на SSD? Думается, в первом приближении только отодвинется проблема оптимизации. А там "или осёл помрёт" или проблемные места проекта таки перепишут в плановом порядке. В общем, в первое время этот переезд однозначно даст эффект, а в будущем - это уж по ситуации. ИМХО конечно
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38939669
WMDmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleWMDmitryнадо переезжать на ССД и не греть голову.Давайте сперва вот с чем определимся. Количество данных в таблице более-менее фиксировано или растёт? Если фиксировано - можно переезжать. Вполне вероятно, это будет даже дешевле, чем нанять грамотного программиста для оптимизации. А если количество данных растёт, ну, например, по прогнозу через год ожидается двукратное увеличение, а ещё через год ещё на 50%, а потом ещё... А если количество данных удесятерится за год - что полезного в таком случае даст переход на SSD?


Количество данныx планируется увеличить раз в 5 - 10. Больше уже вряд ли увеличится. Если отдельный SSD под БД выдержит такую нагрузку. То проблема можно сказать решена.

или проблемные места проекта таки перепишут в плановом порядке.

Переписывать точно не будем.

М.б. придется разнести на 2 сервера, если даже SSD не потянет.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38939675
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitryКоличество данныx планируется увеличить раз в 5 - 10Ну вот и ответ. Увеличение количества данных практически сведёт на нет использование ССД.
В таком случае я бы попробовал перевести таблицу на InnoDB для начала. Потом понаблюдать за использованием памяти по мере прироста данных.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38939680
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleУвеличение количества данных практически сведёт на нет использование ССД.Почему?
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38939687
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftvkleУвеличение количества данных практически сведёт на нет использование ССД.Почему?Так мыслю. Сейчас при выполнении запроса с джойном во временную таблицу тянется весьма значительное (а иначе бы этого топика и не было) количество данных из таблицы songs. Тянется с диска, потому как MyISAM. Отношение скорости чтения с SSD по отношению к обычному диску составляет порядка 8...20 приблизительно (в зависимости от конкретных моделей). Если отбросить накладные расходы и допустить линейную зависимость, то можно предположить, что при десятикратном возрастании количества данных будет такое же возрастание объёма копирования во временную таблицу. Таким образом, можно говорить максимум только о двукратном улучшении временнЫх характеристик выполнения запроса в долговременной перспективе. В реальности, думаю, этот показатель будет значительно ниже, потому как кроме копирования там есть ещё какие-то функции. Возможно, где то ошибаюсь, поправьте...
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38939732
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleВозможно, где то ошибаюсь, поправьте...Да в том-то и дело, что ситуация настолько неопределенная, что не вижу, как тут можно о чем-то гадать... Ни за, ни против.

А может там (не в конкретной таблице, а вообще в базе) "горячих" данных как был гигабайт, так и останется. А все остальное будет лежать мертвым грузом, читаемым раз в год или вовсе никогда.
И так вариантов множество.
...
Рейтинг: 0 / 0
Кэширование таблиц в MySQL
    #38939928
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WMDmitrymiksoftВот поэтому и нужно смотреть запросы и индексы.
MyISAM не умеет кэшировать содержимое таблиц, а только индексов . Поэтому запросы желательно строить так, что в содержимое самих таблиц они лазили по минимуму, а лучше совсем не лазили.

Огромное упущение разработчиков. При современныx конфигурацияx серверов, было бы очень кстати.

Не настолько большое, как вам кажется. Есть еще кеш ОС.
Если иркутские гопники ограничили вам число обработчиков php, то даннные из этого кеша вы должны выпадать.
...
Рейтинг: 0 / 0
55 сообщений из 55, показаны все 3 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Кэширование таблиц в MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]