powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Кэширование таблиц в MySQL
25 сообщений из 55, страница 2 из 3
Кэширование таблиц в 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
25 сообщений из 55, страница 2 из 3
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Кэширование таблиц в MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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