20K читает сделает медленную вставку в мою таблицу? Как насчет сбоя внешнего ключа? - PullRequest
1 голос
/ 02 марта 2010

Иногда требуется 10 - 11 секунд, чтобы ВСТАВИТЬ в мою таблицу, в которой меньше десятка записей.

Я получаю следующее в статусе InnoDB моей базы данных:

0.29 inserts/s, 0.03 updates/s, 0.09 deletes/s, 20365.73 reads/s. 20.37K reads/s

Кажется, много - ты согласен? Я не уверен, что чтение 20K - это все та же таблица, но это вполне возможно.

Я тоже получаю

Foreign key constraint fails for table record_lock.

Может ли сбой ограничения внешнего ключа замедлить процесс?

Вот схема

CREATE TABLE IF NOT EXISTS `record_lock` (
  `module_id` int(10) unsigned NOT NULL,
  `module_record_id` int(10) unsigned NOT NULL,
  `site_id` int(10) unsigned NOT NULL,
  `user_id` int(10) unsigned NOT NULL,
  `expiration_date_time` datetime NOT NULL,
  `date_time_created` datetime DEFAULT NULL,
  PRIMARY KEY (`module_id`,`module_record_id`),
  KEY `record_lock_site_id` (`site_id`),
  KEY `index_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Ответы [ 2 ]

3 голосов
/ 02 марта 2010

Большая часть скорости вставки зависит от того, как вы отправляете данные на сервер для вставки. Если вы просто перечисляете один оператор вставки после следующего оператора вставки для тысяч строк, то для его анализа и обработки потребуется несколько секунд. Также требуется время, чтобы передать это по сети. Я не знаю, будет ли это зависеть от твоего выбора времени.

Ключи, вероятно, не имеют большого значения, если бы мне пришлось угадывать.

Вероятно, вам следует использовать функциональность LOAD DATA INFILE MySQL для быстрой вставки большого количества записей одновременно. Я использовал это, и это сокращает время исполнения вставки с 10 - 30 секунд до менее чем секунды.

http://dev.mysql.com/doc/refman/5.1/en/load-data.html

1 голос
/ 02 марта 2010

Использовать таблицу блокировки и выполнить innodb_buffer_pool_size.

Посмотрите на http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/

Это позволяет игнорировать проверку ограничений внешнего ключа для таблиц InnoDB:

SET FOREIGN_KEY_CHECKS = 0;

SET FOREIGN_KEY_CHECKS = 1;
...