|
|
|
Кэширование таблиц в 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 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38939596&tid=1833290]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 407ms |

| 0 / 0 |
