Miałem to wracając do sprawy przez lata i nigdy nie byłem w stanie dotrzeć do sedna. Nie mam pojęcia, co może powodować te blokady.Błąd MySql> Przekroczono limit czasu oczekiwania na blokadę; spróbuj ponownie uruchomić transakcję SQLState: 41000 VendorError: 1205
Błąd jest: Lock wait timeout exceeded; try restarting transaction SQLState: 41000 VendorError: 1205
Instrukcja SQL jest pojedynczym INSERT działa w ramach transakcji. Wszystkie wkłady są z tej postaci, więc nie ma wkładki luzem ani mieszać wkładki mode itp
INSERT INTO attachment( id, entityid, entitytype , addeduserid , deleteduserid , fullpath , filename, status, creationdate, lastupdated, deletiondate, hasfile,notes,history,type,mimeinfo,archivedby,archivedon, referencedate,changedby,changedon ) values (0,0,2,360,null,NULL,NULL,1,'2013-02-20 08:45:31','2013-02-20 08:45:31',NULL,0,NULL,'20/02/2013 08:45:UserA:File uploaded internally. <br>',0,NULL,null,NULL,NULL,null,NULL);
Konfiguracja systemu: Mysql wersja: 'Wersja serwera: 5.1.61 dystrybucji Źródło' (na RedHat)
przechowywania: InnoDB
konfiguracja InnoDB podobne (częściowo edytowane z my.cnf)
innodb_file_per_table=1
innodb_buffer_pool_size=3G
innodb_additional_mem_pool_size=20M
innodb_log_file_size=512M
innodb_log_files_in_group=2
innodb_log_buffer_size=16M
innodb_support_xa=1
innodb_doublewrite=1
innodb_thread_concurrency=0
innodb_flush_log_at_trx_commit=2
innodb_autoinc_lock_mode=2**
innodb_rollback_on_timeout=1
innodb_locks_unsafe_for_binlog=1**
thread_cache_size=8
query_cache_size=256M
query_cache_limit=4M
table_cache=2048
table_definition_cache=1024
tmp_table_size=512M
max_heap_table_size=512M
transaction-isolation=READ-COMMITTED**
innodb_table_locks=0**
innodb_lock_wait_timeout=50**
** zostały one specjalnie dodane w odniesieniu do tego problemu.
Ogólnie:
System (czyli mają 6 wystąpień Każdy wniosek o tej samej strukturze bazy danych wszystkie działające na pojedynczej instancji MySQL) może działać dobrze przez kilka dni, a potem może mieć przebieg gdzie Blokada Waits Start, aby wystąpić zazwyczaj będą pojawiać się w grupach przez cały dzień. Każdy pojedynczy błąd będzie się powtarzać wielokrotnie, ponieważ gdy się nie powiedzie, spróbuję ponownie, a normalnie powtórna próba zakończy się niepowodzeniem. Skonfigurowałem ponowienie próby 4 razy. Często blokady będą występować tylko na kilku różnych stołach.
Dzisiejsze wystąpienie specyficznych kwestii:
Dziś rano na stole attachment
, nie było wkładkę na stole od ostatniej nocy. Nie było również żadnych aktualizacji na stole od poprzedniej nocy. Jeśli blokady nie są powiązane z innymi użytkownikami aktualizującymi i wstawiającymi, czy niektóre instrukcje wyboru mogą powodować blokady? Próbowałem zapewnić wszystkie instrukcje wyboru używać attachment_general_index
?
Ze względu na fakt, że głównie otrzymuję to na kilku różnych tabelach - tutaj jest struktura tego stołu.
CREATE TABLE `attachment` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`entityid` int(10) unsigned DEFAULT NULL,
`entitytype` tinyint(3) unsigned NOT NULL DEFAULT '0',
`addeduserid` int(10) unsigned NOT NULL,
`deleteduserid` int(10) unsigned DEFAULT NULL,
`fullpath` varchar(255) DEFAULT NULL,
`filename` varchar(255) DEFAULT NULL,
`status` tinyint(3) unsigned NOT NULL DEFAULT '0',
`creationdate` varchar(40) DEFAULT NULL,
`lastupdated` varchar(40) DEFAULT NULL,
`deletiondate` varchar(40) DEFAULT NULL,
`hasfile` tinyint(3) unsigned NOT NULL DEFAULT '0',
`notes` text,
`history` text,
`type` tinyint(3) unsigned DEFAULT '0',
`lastupdatedby` int(10) DEFAULT '0',
`lastupdatedinfo` varchar(255) DEFAULT NULL,
`mimeinfo` varchar(255) DEFAULT NULL,
`archivedby` int(10) unsigned DEFAULT NULL,
`archivedon` varchar(40) DEFAULT NULL,
`referencedate` varchar(40) DEFAULT NULL,
`changedby` int(10) unsigned DEFAULT NULL,
`changedon` varchar(40) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `attachment_addeduserid_fkey` (`addeduserid`),
KEY `attachment_deleteduserid_fkey` (`deleteduserid`),
KEY `attachment_archivedby_fkey` (`archivedby`),
KEY `attachment_changedby_fkey` (`changedby`),
KEY `attachment_general_index` (`entitytype`,`entityid`,`status`,`type`),
CONSTRAINT `attachment_ibfk_1` FOREIGN KEY (`addeduserid`) REFERENCES `user` (`id`),
CONSTRAINT `attachment_ibfk_2` FOREIGN KEY (`deleteduserid`) REFERENCES `user` (`id`),
CONSTRAINT `attachment_ibfk_3` FOREIGN KEY (`archivedby`) REFERENCES `user` (`id`),
CONSTRAINT `attachment_ibfk_4` FOREIGN KEY (`changedby`) REFERENCES `user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3619 DEFAULT CHARSET=latin1$$
Mam załączeniu niedawnej InnoDB SHOW STATUS, to od dziś i nie było trzeba czekać zamek od wczoraj. Nie rozumiem wszystkich tych wyników, ale najważniejsze jest to, że zamki nigdy nie pojawiają się tutaj. Zakładam, że nie są one zaklasyfikowane jako zakleszczenia?
https://docs.google.com/document/d/1Hslf2B594n8ofAUYxN54Gh8FrSCIFNGGMtthVI_Lv4k/pub
Czy to tylko martwy obszar zamki, które jest interesujące dla tego problemu? Jeśli są inne obszary, spróbuję je zebrać, gdy się pojawią i będą mogły dostarczyć.
Każda pomoc zostanie doceniona.
Nick
Co mówi napis "POKAŻ INNODB"? – Danack
Ponadto, co jeszcze w transakcji, że błędy się? Zgaduję co najmniej jedną wstawkę, ponieważ może to łatwo doprowadzić do: http://www.xaprb.com/blog/2006/08/03/a-little-known-way-to-cause-a-database- deadlock/ – Danack
@Danack, patrz link powyżej do niektórych wyników do SHOW INNODB STATUS. W przypadku transakcji zakończonej niepowodzeniem generalnie nie ma dużej liczby akcji, ale generalnie nigdy nie ma dwóch wstawień do tej samej tabeli w ramach tej samej transakcji. Odnośnie łącza xaprb (które czytałem dawno temu) - ale ze względu na charakter sytuacji nie myślałem, że to się stosuje? I dzięki za zainteresowanie! –