SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 04.06.2013 09:16:09

Denya-qt
Участник
Зарегистрирован: 04.06.2013
Сообщений: 15

Обращение нескольких клиентов к одной таблице InnoDB. Блокирование?

Добрый день.
Столкнулся с проблемой долгого выполнения выборки из таблицы (последние 7 строк), когда в эту же таблицу другой клиент вставляет строку. Везде пишут, что InnoDB поддерживает одновременное чтение и запись, но у меня почему-то задержки.
Подскажите, пожалуйста, куда копать?
Спасибо.

Добавлено:
Увеличил innodb_buffer_pool_size с 10М до 500M, производительность увеличилась в несколько раз.
Что можно еще изменить в настройках MySQL для существенного увеличения производительности?
Спасибо.

Отредактированно Denya-qt (04.06.2013 09:44:20)

Неактивен

 

#2 04.06.2013 09:57:27

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Обращение нескольких клиентов к одной таблице InnoDB. Блокирование?

Посмотрите эту презентацию: http://sqlinfo.ru/a/i/rubtsov_mysqlbot.ppt


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#3 04.06.2013 11:55:06

Denya-qt
Участник
Зарегистрирован: 04.06.2013
Сообщений: 15

Re: Обращение нескольких клиентов к одной таблице InnoDB. Блокирование?

Neval, сделал еще несколько изменений в соответствии с презентацией, но на первый вроде ничего не поменялось.
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 0
table_open_cache = 512
tmp_table_size = 32M
thread_cache_size = 32
innodb_additional_mem_pool_size = 16M

Неактивен

 

#4 04.06.2013 14:00:03

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Обращение нескольких клиентов к одной таблице InnoDB. Блокирование?

Если памяти достаточно, увеличьте ещё innodb_buffer_pool_size, а innodb_log_file_size
пропишите 25% от innodb_buffer_pool_size.

Хотя наверное сначала лучше разобраться с самими запросами.
Блокировки в InnoDB есть, но на уровне строки, т.е. читать нельзя только ту строчку, в которую на данный момент проиводится запись, все остальные можно. Но не знаю точно, но логично предположить, что когда Вы выбираете 10 строчек и одна из них заблокирована, то процесс будет ждать её разблокировки чтобы вернуть все 10 строк, а не 9 без заблокированной. Пусть администраторы прокомментируют этот момент, мне самому стало интересно smile


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#5 04.06.2013 16:09:58

Denya-qt
Участник
Зарегистрирован: 04.06.2013
Сообщений: 15

Re: Обращение нескольких клиентов к одной таблице InnoDB. Блокирование?

У меня каждые 3 секунды один клиент читает последние 10 строк в каждой таблице, а другие клиенты каждые 3 секунды вставляют строки в эти таблицы.
Т.е. получается обмен "в реальном времени" через посредника в виде БД.
Блокируется по-любому, т.к. без клиентов на запись все летает.

Неактивен

 

#6 04.06.2013 16:33:41

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Обращение нескольких клиентов к одной таблице InnoDB. Блокирование?

А параметр sync_binlog=1 у Вас не имеется, случаем?


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#7 04.06.2013 23:46:25

Denya-qt
Участник
Зарегистрирован: 04.06.2013
Сообщений: 15

Re: Обращение нескольких клиентов к одной таблице InnoDB. Блокирование?

Neval, нет, такого параметра не прописано.

Неактивен

 

#8 05.06.2013 17:19:57

gcib
Забанен
Откуда: Феодосия
Зарегистрирован: 26.04.2010
Сообщений: 2

Re: Обращение нескольких клиентов к одной таблице InnoDB. Блокирование?

Denya-qt написал:

У меня каждые 3 секунды один клиент читает последние 10 строк в каждой таблице, а другие клиенты каждые 3 секунды вставляют строки в эти таблицы.
Т.е. получается обмен "в реальном времени" через посредника в виде БД.
Блокируется по-любому, т.к. без клиентов на запись все летает.

Посредник - это всегда плохо. В любом деле. Но при нормальной работе сервера такого "зависания" быть не должно. Имхо...

Неактивен

 

#9 05.06.2013 17:54:57

Denya-qt
Участник
Зарегистрирован: 04.06.2013
Сообщений: 15

Re: Обращение нескольких клиентов к одной таблице InnoDB. Блокирование?

gcib, там по-другому не сделать. Тем более в БД все равно надо все складывать.

Кстати, а много ли времени тратиться на соединение с MySQL, где можно подсмотреть этот показатель?

Неактивен

 

Board footer

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