|
|
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Эти строки (кроме третьей колонки) повторяются много сотен раз. Это не лечится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2013, 10:44:47 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
mihail_13[/src] Эти строки (кроме третьей колонки) повторяются много сотен раз. Это не лечится? А с чего вы взяли что это вообще надо лечить ? Никогда раньше не обращал внимания, но у меня такая же картина и проблемы это не вызывает. Кстати, третья колонка - идентификатор потока. Может быть, такой вывод подразумевает, что и в этом треде файл ТОЖЕ ДОСТУПЕН, но не обязательно был открыт конкретно этим тредом. Линукс же. Люди в первую очередь делают чтобы работало, а не чтобы было красивенько. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2013, 00:16:38 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
Если тоже доступен, то все хорошо, но смотреть стал потому что очередной раз уперся в ограничение количества открытых файлов (сейчас стоит 67108864), а объем тестируемых данных достиг лишь 1% от рабочего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2013, 11:21:24 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
mihail_13, ну во-первых вы не обязательно правильно установили ограничение. во-вторых сколько же всего там таблиц? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2013, 20:11:24 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
"не обязательно правильно" это как? Таблиц меньше 25000 (ожидается больше миллиона) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2013, 14:21:02 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
mihail_13, есть стандартные ограничения ulimit в unix, есть специфичные ограничения для linux, есть ограничения в системах типа apparmor. Выбирайте где вы могли облажаться. Многовато таблиц что-то. Все ли вы делаете правильно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2013, 15:13:51 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
в linux и mysql все ограничения поставил гигантские, но если тратить не по делу все все равно закончится, вот и хочу понять что тратится по делу а что нет количество таблиц разумно, в других вариантах другие потери все убъют ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2013, 16:44:57 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
авторвсе ограничения поставил гигантские Предполагаю, лишь думаете, что вам это удалось поставить. Ну вот добьетесь вы чтобы table_cache был очень большой и работал, а толк в чем ? Исходя из каких данных вы заключили, что это критично для вашего приложения ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2013, 19:47:39 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
Таблицы обрабатываются не параллельно, а последовательно, одновременно открытыми нужны не более тысячи таблиц, приложение говорит mysql закрывать ненужные (криво работает только mysqldump - умирает, но не закрывает.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2013, 21:52:12 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
mihail_13, если это был такой ответ на поставленные вопросы, то он совсем не понятен. Именно снятие дампа mysqldump приводит к повышенному расходу файловых дескрипторов, но при обычной работе никаких проблем нет, так ? Ну так надо lsof смотреть в момент снятия дампа перед возникновением ошибки. И mysql обновить, как обычно. в 99% случаев баги, которые вы встретите уже кто-то нашел и описал в багтрекер mysql . Причем, получше вас описал и воспроизвел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2013, 22:30:30 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
Вот я и хочу понять, что считать повышенным расходом файловых дескрипторов, а что нормальным (но мне кажется что десятки миллионов это несколько многовато). И как определить сколько же их потребуется. Проблема существует и у приложения, только она поменьше, поскольку оно закрывает ненужные таблицы. Посмотреть lsof перед возникновением ошибки? И кто мне скажет в какой момент его запустить? Можно просто посмотреть когда mysqldump работает - все файлы открыты огромное количество раз и не закрываются. mysql недавно был заменен на версию 5.0.67, но что-то не особо помогло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 12:16:25 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
mihail_13, в порядке телепатической помощи поставьте --skip-external-locking в конфиг. кстати, такое значение обычно в дистрибутивах стоит. Стандартный конфиг из пакетов не так уж плох, если задуматься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 13:06:03 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
вообще, вроде бы эта опция и так по-умолчанию должна стоять. неужели добавляли external-locking ? ну можно еще попробовать mysqldump --lock-all-tables. В этом случае должна устанавливаться одна глобальная блокировка на весь mysql и, соответственно, незачем дергать каждый файл . Или вообще тогда mysqldump без блокировок, если вам это подходит. В общем случае, пытаясь оригинальничать в любую нетрадиционную сторону, обязательно куда-нибудь упретесь. Для тех, кто не собирается разбираться в сути проблем, выгодно просто быть как все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 13:15:12 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
Не понял каким образом это может иметь отношение к проблеме. Чтобы закрыть таблицу mysqldump должен сказать mysql flush table ... Эти опции не заставят mysqldump сделать это. Количество открытых таблиц достигает максимума и mysql, почему-то, вместо того чтобы закрыть часть открытых ранее, сообщает что больше открыть не может. А поскольку каждая таблица почему-то открыта по нескольку тысяч раз катастрофа достижима легко. Лочка базы (сейчас mysqldump ничего не лочит) должна не дать открывать таблицы многократно или позволить mysql самому закрывать ранее открытые таблицы при необходимости? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 14:11:54 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
mihail_13, я же написал - в порядке телепатической помощи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 17:03:58 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
Удалось все выяснить. Библиотеки действительно открыты один раз (lsof показывает что они доступны всем потокам). С файлами .MYI тоже самое. А вот с .MYD катастрофа. Обращение к таблице из каждого соединения вызывает его очередное открытие в системе. Непонятно зачем такой бред сделали разработчики mysql и главное как запретить mysql открывать файлы данных для каждого соединения поотдельности. У меня 4096 таблиц, которые одновременно используются через 300 соединений - итого 1228800 открытых файлов (в рабочей версии это число может возрасти еще в 4 раза, хотя учитывая что open_files_limit больше чем 65535 mysql понимать отказывается это уже неважно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2013, 16:38:25 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
mihail_13, вы мои советы пробовали или нет? не надо ничего понимать, надо пробовать. Объяснять слишком долго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2013, 16:53:55 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
netwind, Я изучал это не на mysqldump, а на своих приложениях (некоторые уже тоже уперлись в эту же проблему), поэтому ключи запуска mysqldump я не пробовал. Ну почему так сделали объяснять не обязательно. Главное как сказать mysql не открывать многократно одни и те же файлы. external-locking я не добавлял, поэтому --skip-external-locking не проверял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2013, 18:04:43 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
mihail_13, да вы вообще конкретного ничего не приводите. Поэтому приходится использовать телепатию. Тут нет данных ДОКАЗЫВАЮЩИХ, что mysql на самом деле открыл все эти файлы многократно. Давайте вы без этой программы, которая как-то странно работает с многопоточными приложениями, просто в /proc/ид_процесса_mysql/fd покопаетесь. авторmysql недавно был заменен на версию 5.0.67, но что-то не особо помогло. вообще молодцы. одно старое говно на другое чуть более свежее поменяли. ну почему нельзя сразу на последнюю в 5.0.x обновить, раз уж такие серьезные проблемы всплыли? При обновлении в рамках одной и той же линейки 5.0.x поведение оптимизатора не поменяется. Нет никакой опасности. Я считаю что, единственный момент когда mysql требуется на самом деле все эти файлы открыть одновременно - это одновременная блокировка всех таблиц, которую делает mysqldump. В обычной ситуации mysql прекрасно будет работать просто открывая файлы поочередно по мере надобности. И хотя это не всегда оптимально, но вполне нормально работает. Соответственно, выход нужно искать в изменении процесса снятия бекапа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2013, 19:48:09 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
Если бы все уперлось лишь в mysqldump, была бы лишь задача его переписать, но все совсем плохо. То что я выяснил и не надо было выяснять, это и так в документации mysql написано. Значения table_cache и max_connections взаимосвязаны. Например, для 200 одновременно работающих соединений необходимо иметь кэш для таблиц размером по меньшей мере 200 * n, где n - максимальное количество связанных таблиц. Это не совсем точно то, но то про что я говорю из этого следует. Только как запретить такое безобразие там не сказано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2013, 23:06:13 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
http://dev.mysql.com/doc/refman/5.6/en/table-cache.html авторhe table is opened independently by each concurrent session . This uses additional memory but normally increases performance. With MyISAM tables, one extra file descriptor is required for the data file for each client that has the table open. (By contrast, the index file descriptor is shared between all sessions .) больше индексов хороших и разных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2013, 00:21:09 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
mihail_13, по всей видимости написана правда. о поскольку это всего лишь КЕШ дескриптов, проблем при обычной работает не возникает. Какие не нужны - закроются. Вы же сами сказали, что проблема началась от mysqldump - вот и сделайте чтобы он не открывал все сразу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2013, 02:09:19 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
Значит в 5.6.* это исправили. А в 5.0.* было Следует удостовериться, что ваша операционная система способна обрабатывать такое количество открытых файловых дескрипторов, какое предполагает данная установка table_cache. Если устанавливается слишком высокое значение table_cache, то MySQL может выйти за пределы допустимого количества файловых дескрипторов, прервать соединение, не выполнять запросы и стать очень ненадежным. Необходимо также принять во внимание, что для обработчика таблиц MyISAM требуется по два файловых дескриптора для каждой уникальной открытой таблицы. Допустимое для MySQL количество файловых дескрипторов можно увеличить с помощью опции запуска --open-files-limit=# (see section A.2.16 Не найден файл (File not found)). Получалось наоборот очень много дескрипторов и маленький кеш. У меня стояло 65535 дескриторов (больше не понимает) и 32000 кеш. Но гораздо более быстрое потребление дескрипторов при большом количестве соединений приводило к File not found гораздо раньше заполнения кеша и закрытия части таблиц. Закрытие части ненужных таблиц моими приложениями вначале спасало, но с ростом числа таблиц и соединений, тоже стало недостаточным решением. А mysqldump разумеется открывает все таблицы не заранее, он их открывает по очереди, но уже обработанные не закрывает и налетает на File not found гораздо раньше, чем мои приложения. Видимо придется разбираться куда делось configure из дистрибутивов старших веток, и как их собирать и устанавливать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2013, 11:03:36 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
авторЕсли устанавливается слишком высокое значение table_cache, то MySQL может выйти за пределы допустимого количества файловых дескрипторо Но ведь чтобы наступили реальные проблемы, нужно чтобы у вас не только не просто открытых 300 соединений, а 300 одновременно выполняющихся запросов к десятку таблиц. Ваша конфигурация наверняка умрет значительно раньше из-за проблем производительности вызванных выборкой данных, а не открытием файлов. Раз проблемы начались именно с mysqldump, следует обратить внимание на то как он открывает. Я так думаю, дело в блокировке, так что либо следует отучить mysqldump блокировать, либо использовать одну глобальную блокировку на весь сервер. Конечно же, лучший вариант нанять админа чтобы разобрался наконец что там за ограничения. но если бы вы могли, тогда три топика не жевали одно и то же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2013, 11:40:16 |
|
||
|
Многократно открытые библиотеки
|
|||
|---|---|---|---|
|
#18+
65535/300 это немного больше 200 таблиц и не обезательно одновременно Код: sql 1. 2. 3. 4. 5. Т.е. и после завершения приложения все останется открытым и может пострадать следующее. А у меня таблиц в 20 раз больше только используемых постоянно я еще несколько десятков тысяч используемых разово (вот им то я и делаю flush, а mysqldump не делает) Взять админа, взять еще десяток-другой компьютеров каждый со своим 400Mbit каналом в интернет - это все конечно хорошо, но пока в мечтах лишь добавить один жесткий диск в этот компьютер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2013, 12:20:43 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38451651&tid=1835787]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
84ms |
get tp. blocked users: |
2ms |
| others: | 209ms |
| total: | 375ms |

| 0 / 0 |
