SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 24.11.2007 20:06:42

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Помогите, какая то фигня творится...

Совершенно неожиданно, сервер начал безбожно тупить при вставке данных последние несколько дней. Выборки при этом вроде продолжают работать быстро, НО они как бы вешаются в очередь и ждут пока не закончится вставка, причем совсем в другую  БД.

Ничего в конфигах mysql не менялось.

бывает и по другому, вот например сейчас в show processlist висит такая вот запись:

Блин, пока писал - она таки закончилась и я не успел скопировать, в общем там была запись со статусом "Sending data". в info было написано

DELETE table_name

и со временем > 4000 секунд!!!! Правда именно она на других запросах не отражалась, но mysql пахал в два процессора загруженных под 100% все эти 4000 секунды.

Что это вообще может быть и почему так долго? Сразу скажу что запросов вида DELETE * FROM... у меня нет. Есть только DROP TABLE

Неактивен

 

#2 24.11.2007 21:34:58

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Помогите, какая то фигня творится...

Вот сейчас например вот такая запись присутствует:

Код:

Id    User    Host    DB    Command    Time    State    Info
8755    root    localhost    se    Query    4091    Repair with keycache    ALTER TABLE T_Temp ENABLE KEYS

ниче не понимаю...

Отредактированно Shopen (24.11.2007 21:35:36)

Неактивен

 

#3 24.11.2007 23:32:28

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Помогите, какая то фигня творится...

Если Innodb, то возможно повредился tablespace, если так, то нужно пересоздавать tablespace и восстанавливать из backup.

Неактивен

 

#4 25.11.2007 01:27:53

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите, какая то фигня творится...

ALTER TABLE T_Temp ENABLE KEYS

У Вас кто-то альтерит таблички. ENABLE KEYS перестраивает все ключи таблички,
поэтому оно может тормозить. Особенно оно будет тормозить, если у Вас маленькие
буферы в памяти под ключи. Всё, что обращается к этой таблице, разумеется, будет
ждать изменения метаданных, а всё, что обращается к другим таблицам, будет
тормозить, потому что такой альтер на большой таблице создает _очень_ большую
дисковую активность. Увеличение буфера для ключей должно помочь.

Неактивен

 

#5 25.11.2007 03:41:51

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Помогите, какая то фигня творится...

rgbeast написал:

Если Innodb, то возможно повредился tablespace, если так, то нужно пересоздавать tablespace и восстанавливать из backup.

нет, таблица myisam

Неактивен

 

#6 25.11.2007 03:46:22

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Помогите, какая то фигня творится...

paulus написал:

ALTER TABLE T_Temp ENABLE KEYS

У Вас кто-то альтерит таблички. ENABLE KEYS перестраивает все ключи таблички,
поэтому оно может тормозить. Особенно оно будет тормозить, если у Вас маленькие
буферы в памяти под ключи. Всё, что обращается к этой таблице, разумеется, будет
ждать изменения метаданных, а всё, что обращается к другим таблицам, будет
тормозить, потому что такой альтер на большой таблице создает _очень_ большую
дисковую активность. Увеличение буфера для ключей должно помочь.

буфер для ключей это key_buffer_size? помоему он у меня достаточно большой стоит, сейчас не могу посмотреть, только завтра.

дело в том, что это работает уже давно, более менее существенного прироста в обьеме баз данных нет, размер таблиц порядка 2-4G
а тут тормоза скачкообразно подскочили. Раньше скрипт генерящий базу отрабатывал за ~1.5 часа а теперь 4-5.

Что могло такого случится, вот чего мне не понятно

P.S. Есть переменная repair_threads, как то так - какое значение имеет смысл ставить на 4 процессорной системе?
1? 2? 4?

я так понимаю она напрямую влияет на скорость перегенерации индесков, разводя их по процессорам, или нет?

Отредактированно Shopen (25.11.2007 03:48:24)

Неактивен

 

#7 25.11.2007 13:25:51

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите, какая то фигня творится...

Multi-threaded repair is still beta-quality code.

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

Посмотрите загруженность дисков, может быть, например, там мало свободного
места, тогда будет долго работать выделение места. Скачкообразно могла снизиться
производительность, если, например, у Вас в дампе появились дополнительные
индексы, которые создаются длительное время.

Неактивен

 

#8 25.11.2007 13:46:04

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Помогите, какая то фигня творится...

Я вот тоже думаю, что то таки с файловой системой или i/o
код не менялся, индексы не добавлялись.

не знаете каких нибудь user-friendly unix-утилит, которыми можно потестировать производительность например той же файловой системы?

еще маленький вопрос  - по умолчанию mysql юзает системный /tmp или какой то свой? Имеет ли смысл тут что то менять, например если базы данных на одном разделе (Raid10) а система на другом (Raid1) - то где лучше держать tmp - на разделе с данными или таки на системном.

В первом варианте при использовании tmp пересекаться будут запросы mysql с самимм собой, а во втором mysql с системными (логи и пр.)
Мне что то подсказывает, что лучше tmp держать вместе с данными, но аргументов нет smile
Отдельный диск под tmp не рассматриваю - нет его, диска smile

P.S. multi_thread я как то пробовал - наблюдал существенный прирост в скорости реиндексирования (напр. при ALTER TABLE), при этом реально работают несколько камней, а потом они кучей пишутся на диск

Отредактированно Shopen (25.11.2007 13:54:46)

Неактивен

 

#9 25.11.2007 14:39:30

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите, какая то фигня творится...

Производительность диска на чтение можно померять каким-то простым способом типа
dd if=/dev/sda1 of=/dev/null bs=1024 count=102400
Оно скопирует 100М и скажет, за сколько сделало.

Полезными могут оказаться команды
iostat -kx 1
dstat

Если есть возможность пострелять по диску - то bonnie++.

Все зависит от нагрузки на сервер. Если у Вас там куча приложений - то, возможно, временный
каталог лучше держать на диске с данными. Если машинка работает в основном на MySQL, то
лучше на системном, т.к. другие приложения туда почти не пишут smile
Да, за каталог отвечает системная переменная tmpdir.

Неактивен

 

#10 25.11.2007 16:34:11

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Помогите, какая то фигня творится...

Машинка - типичный LAMP. (SUSE SLED10)
Несколько сайтов с весьма большой посещаемостью, несколько с поменьше. Больше ничего особенного нет

Неактивен

 

#11 25.11.2007 19:17:40

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите, какая то фигня творится...

А, если не секрет, зачем нужно восстановление дампа на регулярной основе? smile

Неактивен

 

#12 25.11.2007 22:23:44

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Помогите, какая то фигня творится...

paulus написал:

А, если не секрет, зачем нужно восстановление дампа на регулярной основе? smile

Это не восстановление дампа, это перенос.

Есть одна база, расположенная на локальной машине-реестре, примерно 15G, которая обновляется непрерывно. Но по историческим причинам (база ведется почти 10 лет) - формат хранения dbf. Для нее написано масса софта, который с ней работает

C другой стороны есть поисковик, в котором можно искать из мира в этой базе. Каждый день по ночам одна софтина с локальной машины делает текстовый tab-файл, который заливает на сервер. Сервер по крону перегенерирует поисковые базы из этого файла. Сделать обновление дельтами крайне проблематично, хотя мы про это подумываем на перспективу.

Более того есть планы и локальный реестр перевести на не BDE-движок и заюзать что нибудь типа mysql или oracla-а. Но тут пока конь не валялся, надо понять какая СУБД нам лучше, переписать ту самую кучу софта(а Delphi-программист у нас один и это не я sad ) и пр.


Вот примерно так.

Неактивен

 

#13 26.11.2007 12:49:14

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите, какая то фигня творится...

Вас спасет ODBC драйвер MySQL, который легко подключается к BDE smile

Неактивен

 

#14 26.11.2007 13:27:20

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Помогите, какая то фигня творится...

paulus написал:

Вас спасет ODBC драйвер MySQL, который легко подключается к BDE smile

Пробовали. Конвертация всей базы занимает примерно 8 часов. sad
я попробовал понять почем так долго, обнаружил в логе mysql - что вставка идет вот такими вот записями:

Код:

INSERT INTO .....
SELECT @@IDENTIFY
INSERT INTO .....
SELECT @@IDENTIFY
....

При этом к mysql приходит порядка 100 тыс. запросов в минуту. из них половина вставок, половина select identity.

селекты эти никому не нужны, потому что вставки идут подряд и в одну таблицу. Но с другой стороны mysql я так понимаю вынужден физически записывать каждую запись на диск, чтобы вернуть достоверный LID. Как это отключить я не нашел, а 8 часов это нереально много

Неактивен

 

#15 26.11.2007 17:40:04

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите, какая то фигня творится...

Я имел в виду использовать ODBC как основное хранилище данных - тогда не надо
ничего конвертировать smile

А как Вы делаете дамп из dbf? Один инсерт на 100 строк работает в несколько раз
быстрее, чем 100 инсертов по 1 строке.

Кстати, можете в начало дампа написать LOCK TABLES ... WRITE - это несколько увеличит
скорость загрузки данных из дампа.

Неактивен

 

#16 26.11.2007 18:17:16

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Помогите, какая то фигня творится...

paulus написал:

А как Вы делаете дамп из dbf? Один инсерт на 100 строк работает в несколько раз
быстрее, чем 100 инсертов по 1 строке.

Это я знаю, но в софте изпользуется ADOTable и там нет запросов, там что то типа вставить строку, извлечь итп, а ADO уже преобразует это в запросы и через ODBC передает в Mysql, как то так. Вообще я не очень знаю как это работает, это не моя программа, у меня только более менее общее понимание.

paulus написал:

Кстати, можете в начало дампа написать LOCK TABLES ... WRITE - это несколько увеличит
скорость загрузки данных из дампа.

Попробую, спасибо. А это действительно ускоряет процесс при загрузке дампа с нуля в пустую таблицу?

Неактивен

 

#17 26.11.2007 18:22:22

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите, какая то фигня творится...

Да, конечно, так оно по крайней мере делает "вставить", а не
"заблокировать-вставить-разблокировать".

Но основное время у Вас все равно уйдет на ALTER...ENABLE INDEX.

Неактивен

 

#18 26.11.2007 18:28:23

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Помогите, какая то фигня творится...

Ясно.

По последней информации стало известно, что проблемы в дисковой системе. БД располагается на 10 райде из четырех дисков. Один из винтов судя по всему стал сбоить или его порт на контроллере. Вынули винт - все вернулось к предыдущим скоростям. Щас тестируем винта, готовим замену.

Кстати, может есть какой то опыт по конфигурации дисковой подсистемы? Какой Raid предпочтительней? Какие диски/контроллеры?

Неактивен

 

#19 26.11.2007 18:40:58

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите, какая то фигня творится...

Хардверные рейды хуже софтверных smile

10 - вполне хороший рейд.

Неактивен

 

#20 26.11.2007 18:47:03

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Помогите, какая то фигня творится...

paulus написал:

Да, конечно, так оно по крайней мере делает "вставить", а не
"заблокировать-вставить-разблокировать".

Я думал, что при LOAD DATA блокировка происходит одна...

Неактивен

 

#21 26.11.2007 18:48:10

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Помогите, какая то фигня творится...

paulus написал:

Хардверные рейды хуже софтверных smile

10 - вполне хороший рейд.

Это понятно smile
может есть на примете конкретные хорошие  железки? smile

Неактивен

 

#22 27.11.2007 01:00:40

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите, какая то фигня творится...

При LOAD DATA - да. Вы просто писали INSERT-SELECT-INSERT...

Хороших железок предложить не могу. Опыт показывает, что железки
хуже, чем md-raid. Работают медленнее и куда менее настраиваемые.
Возможно, я просто их не встречал - хороших smile

С другой стороны, софтверно Вы никогда не сделаете battery back smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson