|
|
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
Veshchiy Oleg, open_files в конфиге не задан. open_files_limit 2566 Есть версии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2014, 00:28:03 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
Tvolod, Уверенности нет, но сталкивался с тормозами при ограничении на открытие дескрипторов... С чем была связана моя ситуация уже не помню, но помогало "расширение границ" по количеству открываемых файлов. Прошу учесть, что моя ситуация была на CentOS 5.6, а не на Windows. По этому могут быть существенные отличия в работе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2014, 00:35:38 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
Tvolod, из статуса меня интересовали значения Open_files в момент выполнения нескольких запросов и Opened_files просто ради интереса... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2014, 00:39:56 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
TvolodnetwindКонечно, некоторые хипстеры, считают что сайт должен сам себя администрировать. Но тогда им не надо ожидать, что обычные базы будут хорошо работать в необычном применении. По-вашему предел возможностей MySQL - это прайс-лист загрузить и гуэстбук замутить? В чем необычность задач, я не очень понимаю. Не метафизически: "не предназначено, мол", а физически, т.е. имеются (объективно) следующие ограничения... и мы их можем увидеть/пощупать на приведённом примере там то и там то... Дело не в пределе возможностей, а в том как обычно используются рсубд. Используешь как все - гуглишь ответ на любую проблему. А в большинстве случаев они даже не возникают. Хочешь необычного - ты один на один с проблемой. netwindЗдесь нет никакой особенной проблемы. производительность не масштабируeтся линейно по числу ядер и это не новость. Опять таки, это просто общее утверждение, пусть даже и верное, я же не знаю. Физика то в чём? Почему это так на данном конкретном приведённом мной весьма простом и измеримом примере. Но вы с ними согласны ? За конкретное это вам придется самолет и командировку оплачивать. Пивом не обойтись. netwindЕсли план запроса предполагает генерирование большой временной таблицы из и так большого числа фактов, почему бы этим запросам выполняться быстро? При параллельном выполнении нескольких запросов план меняется, относительно "сольного" выполнения? Вряд ли. Тогда почему ему исполняться на порядок медленнее? Ещё раз вот именно, еще раз повторюсь: netwindесли вас лично вместо работы над алгоритмом каждые 15 минут заставлять отвлекаться бумагу в принтере менять, забывая каждый раз на чем вы остановились (аналогия с кешем внутри процессора), много вы эти говносайтов склепать успеете в день? автор: ресурсов (процессорной мощности и оперативки), более чем достаточно. Другие не используются. Ну я же показал на картинках, что сервер вовсе не напрягается при выполнении этих трёх задач. Возможно, есть другие измерители, на которые нужно смотреть - тогда буду признателен за подсказку. В моём идеальном мире запросы должны выполняться с той же скоростью, что и раньше пока не станут где-то друг с другом конкурировать (взаимные блокировки, чтение с диска, разделение процессорного времени и т.п.). А если нет конкуренции за ресурсы, то видимых причин снижать на порядок скорость выполнения я не вижу. Ведь если бы запросы шли не одновременно, а друг за другом (в теории по крайней мере), они бы выполнились за линейно возросшее время (в теории по крайней мере). У вас задача поиска всего среди всего - то есть, интенсивный обмен с памятью, который осуществляется через кеш процессора. Вот этого ресурса при параллельной архитектуре и не хватает. И соседи постоянно забивают его другими данными. Наверное, какой-то из профайлеров в состоянии снять метрики cache miss, но это собирать mysql специально надо. Мне кажется это и так достаточно здравое объяснение. netwindНу может быть в этой конфигурации негативные эффекты возникают из-за наличия NUMA или PAE, но скорее всего их нет. Погуглил эти термины... NUMA точно нет, т.к. обычная стандартная машинка. http://www.nix.ru/autocatalog/nix_computers/S5000B_S5365LNi_Core_i74790_16_SATA_RAID_190793.html netwindУ вас современный windows на какой-то массовой хостерской платформе ведь ? Не очень массовая. В антресоли над туалетом пылится. :) Я бы все же убедился как-нибудь конкретнее. Формально в википедии написано что Haswell EP таки поддерживает NUMA. но раз уж это "серийный" сервер из nix, наверное не стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2014, 00:54:01 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
Veshchiy Oleg, Open_files 67 Opened_files 11773 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2014, 00:55:24 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
Tvolod, я так думаю надо вот с этой штукой разобраться https://perf.wiki.kernel.org/index.php/Tutorial, в линуксе запустить mysqld, налить тестовых данных и как-то снять счетчики cache miss автор It provides a list of events to measure micro-architectural events such as the number of cycles, instructions retired, L1 cache misses and so on Не говоря о том, что линуксе может просто внезапно отпустить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2014, 01:04:39 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
ну вот как-то вроде считает у меня, где 13357 - pid процесса mysqld : автор perf stat -e L1-dcache-load,L1-dcache-load-misses,L1-dcache-stores,L1-dcache-store-misses -p 13357 ^C Performance counter stats for process id '13357': 1,109,824 L1-dcache-load 201,929 L1-dcache-load-misses # 18.19% of all L1-dcache hits 372,766 L1-dcache-stores 23,616 L1-dcache-store-misses 9.512196166 seconds time elapsed шо бы это значило ответ где-то здесь http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3b-part-2-manual.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2014, 01:22:48 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
netwindTvolodnetwindЗдесь нет никакой особенной проблемы. производительность не масштабируeтся линейно по числу ядер и это не новость. Опять таки, это просто общее утверждение, пусть даже и верное, я же не знаю. Физика то в чём? Почему это так на данном конкретном приведённом мной весьма простом и измеримом примере. Но вы с ними согласны ? С тем что оно функция зависимости времени выполнения от числа задач и числа процессоров нелинейна это очевидно. Мир вообще в общем не линеен. :) Вопрос в том, в какой зоне нелинейной кривой мы находимся. Я лишь предполагал, что при выполнении числа задач меньшем числа процессоров и избытке памяти нелинейность должна состоять в том, что роста времени выполнения не должно быть вообще. Если соотношение обратное, то да, система как-то нелинейно должна деградировать. netwindЗа конкретное это вам придется самолет и командировку оплачивать. Пивом не обойтись. Была бы гарантия результата, можно было бы и рассмотреть билет на поезд. :) Да и зачем ехать, когда есть удалённый доступ, если нужно. netwindУ вас задача поиска всего среди всего - то есть, интенсивный обмен с памятью, который осуществляется через кеш процессора. Вот этого ресурса при параллельной архитектуре и не хватает. И соседи постоянно забивают его другими данными. Не буду врать, плохо себе представляю работу MySQL с кешем процессора (тем более многоуровневым). Вернее даже наоборот, работу процессора и его многоуровневого кеша с MySQL данными. Возможно, и не должен он пропускать через себя весь объём обрабатываемых данных или даже индексов... netwindНаверное, какой-то из профайлеров в состоянии снять метрики cache miss, но это собирать mysql специально надо. Мне кажется это и так достаточно здравое объяснение. По крайней мере оно логично и конкретно. Спасибо! Надо будет почитать. Кстати, после перезагрузки сервера эффект существенно уменьшился. Он по-прежнему есть, но стало в разы лучше. До этого менял параметры мускула и только рестартовал его. Будем посмотреть, может быть это софтверный глюк. Кто его разберёт... :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2014, 10:04:08 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
Кстати, после перезагрузки сервера эффект существенно уменьшился. Он по-прежнему есть, но стало в разы лучше. До этого менял параметры мускула и только рестартовал его. Будем посмотреть, может быть это софтверный глюк. Кто его разберёт... :( Может быть память была как-то занята другими таблицами и задачами. А при перезагрузке еще не успела. Если у вас myisam, то попробуйте еще myisam_use_mmap=1. Переход на innodb в данной ситуации может улучшить работу с данными в памяти, потому что данные точно залягут в пул innodb. Ну и подумать над планами запросов всегда полезно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2014, 12:01:53 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
netwindTvolodКстати, после перезагрузки сервера эффект существенно уменьшился. Он по-прежнему есть, но стало в разы лучше. До этого менял параметры мускула и только рестартовал его. Будем посмотреть, может быть это софтверный глюк. Кто его разберёт... :( Может быть память была как-то занята другими таблицами и задачами. А при перезагрузке еще не успела. Похоже, наврал. Скорее всего просто были вычисления над лёгкими областями данных. Дополнительные опыты не подтвердили, что перезагрузка влияет. Скорее наоборот, пока система не закеширует большую часть данных всё идёт ещё хуже. netwindЕсли у вас myisam, то попробуйте еще myisam_use_mmap=1. Попробовал. Несколько дней покрутилось с этой опцией. Стало или хуже, или по крайней мере не лучше. Во всяком случае монитор ресурсов показывал постоянные обращения к диску в течение 1.5 суток, пока система всё-таки не закешировала большие таблицы. netwindПереход на innodb в данной ситуации может улучшить работу с данными в памяти, потому что данные точно залягут в пул innodb. А можете пояснить, за счёт чего может улучшить? Если у меня MyISAM через пару часов работы и так все системой (не MySQL!) полностью загружаются в оперативку. Просто проблемно этот опыт поставить. Нужно конвертировать таблицы, а их каждые сутки бекап подменяет... netwindНу и подумать над планами запросов всегда полезно. Ну вот, например, простейший вариант: Код: sql 1. 2. 3. 4. 5. Ищем похожие фото по таблице о 12.5 миллионах записей. Каждое фото характеризуется 100 числами. Алгоритм работает изЮмительно... Табличка проще некуда: Код: sql 1. 2. План лучше некуда: Код: sql 1. 2. 3. 4. 5. 6. Но... До having count(*) >= 70 запрос может вернуть от сотни тысяч до нескольких миллионов строк данных. После от 0 до 10 строк. Вот и всё. Можете этот запрос улучшить? По-моему тут нечего улучшать. Работает секунду и меньше на одно фото (в сольном варианте), что полностью меня устраивает. При параллельном исполнении нескольких подобных запросов время может вырасти до 5 секунд. Другие запросы подобные этому, с той лишь разницей, что добавлены джойны дополнительных данных, участвующих в сортировке и отборе финальных результатов, + число строк в таблицах по 40-50 млн. Т.е. я снова хочу сказать, что нет проблем в самих запросах. Есть странная проблема в параллельном их выполнении, природа которой не очень понятна... :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2014, 00:46:56 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
TvolodnetwindЕсли у вас myisam, то попробуйте еще myisam_use_mmap=1. Попробовал. Несколько дней покрутилось с этой опцией. Стало или хуже, или по крайней мере не лучше. Во всяком случае монитор ресурсов показывал постоянные обращения к диску в течение 1.5 суток, пока система всё-таки не закешировала большие таблицы. netwindПереход на innodb в данной ситуации может улучшить работу с данными в памяти, потому что данные точно залягут в пул innodb. А можете пояснить, за счёт чего может улучшить? По определению. Так работает mmap - один из интерфейсов в ОС , про который неплохо было бы знать. Как и про кеш в процессоре. вместо того чтобы считывать блоки данных через системные вызовы постоянно, эти системные вызовы возникают лишь когда блоки не попадают в уже считанную память область проецируемого файла. Может и не ускорить запросы, которые использовали только лишь key_buffer. Во всяком случае не должно быть хуже. Но вместе вот с этим : Если у меня MyISAM через пару часов работы и так все системой (не MySQL!) полностью загружаются в оперативку. Просто проблемно этот опыт поставить. Нужно конвертировать таблицы, а их каждые сутки бекап подменяет... ..ситуация уже менее прозрачна. что там на что подменяется ? Другой механизм используется в innodb, но он похож. Блоки просто считываются в буфер и при достаточно большом объеме памяти работа происходит только с буфером без обращения к ОС. К несчастью, данные в innodb будут тупо больший размер в байтах занимать и прогноз дать нельзя. Я так подозреваю, все даже ухудшится. Ну вот, например, простейший вариант: [src sql] select M2.ImageID, count(*) as Cnt не читал, но заранее подход осуждаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2014, 01:50:43 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
netwind..ситуация уже менее прозрачна. что там на что подменяется ? Делается бекап свежих данных с удалённого сервера, и нужные для работы таблицы как есть заливаются для обработки через drop table - create table. На сервере MyISAM. Соответственно как минимум придётся парсить бекап файл и править create table. Не сложно, но без серьёзных аргументов не хочется это делать. netwind Я так подозреваю, все даже ухудшится. netwindНу вот, например, простейший вариант: [src sql] select M2.ImageID, count(*) as Cnt не читал, но заранее подход осуждаю. Просвятите, пожалуйста, что не так? Это как девушка тут сообщила: " группировка по ID это новое слово в теории баз данных "? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2014, 09:27:06 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
TvolodЭто как девушка тут сообщила: " группировка по ID это новое слово в теории баз данных "а с чего вы взяли, что scarecrow - девушка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2014, 10:40:08 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
tanglirTvolodЭто как девушка тут сообщила: " группировка по ID это новое слово в теории баз данных "а с чего вы взяли, что scarecrow - девушка? Фото в анкете. И советы... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2014, 11:09:09 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
TvolodФото в анкетеНе стоить верить всему, что видишь в интернете :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2014, 11:25:15 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
Tvolod Код: sql 1. Диск, поди, обычный HDD ? Тогда все логично - идет борьба за перемещение головок диска. tmp_table_size и max_heap_table_size какого размера? Попробуйте под эту табличку+запрос создать индексы (`Value`,`ImageID`) и (`ImageID`,`Value`). Потом сделайте ANALYZE TABLE `ImageMatrix`. И посмотрите на план и время выполнения запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2014, 12:42:31 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
miksoftTvolod Код: sql 1. Диск, поди, обычный HDD ? Тогда все логично - идет борьба за перемещение головок диска. tmp_table_size и max_heap_table_size какого размера? miksoft, на предыдущей странице эту версию обсуждали. tmp_table_size и max_heap_table_size по 16 гигов. Гораздо больше чем мускул реально использует. Максимум он дорастает до 6 гигов. Нагрузки на диски нет никакой, ибо винда кеширует все файлы используемых таблиц и индексов. miksoftПопробуйте под эту табличку+запрос создать индексы (`Value`,`ImageID`) и (`ImageID`,`Value`). Потом сделайте ANALYZE TABLE `ImageMatrix`. И посмотрите на план и время выполнения запроса. Хм... ну можно попробовать. Я правильно понимаю, что в этом случае мускул будет пользоваться только данными из индексов не обращаясь к самой таблице? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2014, 13:20:30 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
TvolodЯ правильно понимаю, что в этом случае мускул будет пользоваться только данными из индексов не обращаясь к самой таблице?он может воспользоваться только данными из индексов что он будет делать, надо смотреть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2014, 13:41:31 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
Tvolodtmp_table_size и max_heap_table_size по 16 гигов.SHOW VARIABLES LIKE 'tmp_table_size' и SHOW VARIABLES LIKE 'max_heap_table_size' это подтверждают? Как изменяются переменные Created_tmp_disk_tables и Created_tmp_tables после выполнения запроса? Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2014, 13:45:51 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
miksoftПопробуйте под эту табличку+запрос создать индексы (`Value`,`ImageID`) и (`ImageID`,`Value`). Потом сделайте ANALYZE TABLE `ImageMatrix`. И посмотрите на план и время выполнения запроса. Эксперименты заняли некоторое время. Код: sql 1. 2. 3. 4. 5. 6. Результат неплохой, хотя и не фантастический. Скорость примерно процентов на 10-15 выше. Большое спасибо за идею! Буду иметь ввиду. miksoftTvolodtmp_table_size и max_heap_table_size по 16 гигов.SHOW VARIABLES LIKE 'tmp_table_size' и SHOW VARIABLES LIKE 'max_heap_table_size' это подтверждают? Да. Код: plaintext 1. miksoftКак изменяются переменные Created_tmp_disk_tables и Created_tmp_tables после выполнения запроса? Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2014, 00:49:39 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
TvolodЭксперименты заняли некоторое время.А теперь как себя ведет параллельное выполнение нескольких запросов? которое "при одновременном выполнении трех-четырёх потоков время выполнения тех же запросов вырастает до 20-30 и более секунд" TvolodСудя по всему каждое выполнение запроса увеличивает Created_tmp_tables на единичку.Нет, это приборная погрешность. http://dev.mysql.com/doc/refman/5.5/en/server-status-variables.html#statvar_Created_tmp_tables Each invocation of the SHOW STATUS statement uses an internal temporary table and increments the global Created_tmp_tables value. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2014, 00:58:38 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
miksoftНет, это приборная погрешность. Не, не, не... погрешность я заметил и учел. Именно при циклическом выполнении данного запроса Created_tmp_tables увеличивается с каждым циклом. Да и куда ему деваться, если и в плане у него Using temporary , и в процессах он как и раньше чаще всего висит в статусе Copying to tmp table? miksoftTvolodЭксперименты заняли некоторое время.А теперь как себя ведет параллельное выполнение нескольких запросов? которое "при одновременном выполнении трех-четырёх потоков время выполнения тех же запросов вырастает до 20-30 и более секунд" Надо покрутить, но, полагаю, что так же. Просто влияние данного запроса чуть меньше (временнОе). А может и чуть больше, учитывая, что размер индексов теперь вдвое вырос. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2014, 01:20:47 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
Tvolodразмер индексов теперь вдвое выросЕсли таблица MyISAM, то всего лишь на треть - с 9 до 12 байтов на запись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2014, 02:55:27 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
Тем не менее результата нет. Переделал подобным образом индексы еще на одном запросе. В один поток вроде как быстрее выполняется. При многопоточном исполнении всё по-прежнему. Может даже ещё хуже. Точных замеров не получается сделать, т.к. на разных областях данных скорость разная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2015, 11:38:49 |
|
||
|
Тормоза при выполнении параллельных запросов. Copying to tmp table
|
|||
|---|---|---|---|
|
#18+
Tvolod, да что ж такое? не будет того результата, который вам нужен. попробуйте у mysql tmpdir на ramdrive вынести. Это может оказаться непросто для винды и возможно сожрет память навсегда ( не как в линуксе), но ускорить может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2015, 12:09:50 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38846422&tid=1833574]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
44ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 352ms |

| 0 / 0 |
