Bagaimana cara mengatasi masalah tipe Deadlock dan Lock time out?

17

Saya membaca banyak blog, mencoba google, tetapi tidak menemukan kepuasan dari solusi apa pun. Saya memiliki masalah berikut:

PDOException: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction: DELETE FROM {cache_field} WHERE (cid LIKE :db_condition_placeholder_0 ESCAPE '\\') ; Array ( [:db_condition_placeholder_0] => field\_info:% ) in cache_clear_all() (line 163 of \includes\cache.inc).

PDOException: SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction: SELECT 1 AS expression FROM {sessions} sessions WHERE ( (sid = :db_condition_placeholder_0) AND (ssid = :db_condition_placeholder_1) )

Saya mencoba untuk menyelesaikan ini dengan meningkatkan innodb_pool_buffer_sizedan wait_timeoutdi my.ini tetapi tidak berhasil.

Saya mengubah mesin tabel cache saya dari Innodb ke MyIasm. Masalahnya hilang tetapi itu bukan solusi yang sempurna. Mesin tabel akan diubah setelah peningkatan drupal. Masalah ini tidak memengaruhi apa pun di situs tetapi saya tidak ingin ini terjadi.

Ada solusi kawan?

Sumit Madan
sumber
Apakah Anda menjalankan cron periodik? Apakah berhasil menyelesaikan?
mpdonadio
Ya cron berhasil dijalankan.
Sumit Madan
Apa yang membuat Anda berpikir mesin tabel cache akan diubah ketika meningkatkan? Ini bukan pengalaman saya.
keithm
Maksud saya jika saya memutakhirkan drupal, tabel cache akan diubah dari MyIasm ke Innodb. Tidak???
Sumit Madan

Jawaban:

16

Baca dan ikuti posting ini ; ini mengasumsikan InnoDB.

Secara khusus, lihat bagian yang mengatakan untuk menambahkan yang berikut ke file settings.php.

$databases['default']['default']['init_commands'] = array('isolation' => "SET SESSION tx_isolation='READ-COMMITTED'");
mikeytown2
sumber
Di tautan beri, ia berbicara hanya untuk kebuntuan cache_field. Namun di situs saya, deadlock dan lock time out terjadi pada semua tabel cache.
Sumit Madan
Hai Mike, Terima kasih untuk tautannya. Saya memeriksa posting Anda yang lain dan menambahkan ini ke settings.php $databases['default']['default']['init_commands'] = array('isolation' => "SET SESSION tx_isolation='READ-COMMITTED'");menyelesaikan masalah saya di server lokal saya. Saya belum memeriksanya di server langsung. Harap konfirmasikan bahwa itu tidak akan memberikan masalah apa pun di masa mendatang jika Anda diuji? Saya menggunakan kickstart perdagangan.
Sumit Madan
Saya menggunakan semua rekomendasi secara langsung, mendengar laporan bahwa drupal.org menggunakan komitmen baca. Pastikan juga untuk menggunakan rilis d7 terbaru karena memiliki jalan buntu juga.
mikeytown2
1
Mikeytown2 Dari apa yang Anda katakan, saya mengerti bahwa sekarang 7 versi drupal telah diselesaikan? bertanya-tanya tentang hal itu karena saya masih menemukan masalah yang sama di versi terbaru.
Marko Blazekovic
1
@MarkoBlazekovic Sebagian besar masalah utama dengan kebuntuan setengah diselesaikan di D7. Masih ada beberapa masalah penguncian dan penguncian metadata dengan tabel cache database. Saya sedang mengerjakan modul untuk menyelesaikannya: drupal.org/project/apdqc . APDQC dari pengujian saya memecahkan hampir setiap masalah penguncian basis data terkait dengan tabel cache. Pastikan untuk memperbaiki semua masalah pada laporan status begitu sudah diinstal. Perhatikan bahwa modul ini masih dalam pengembangan karena saya belum merilis versi non dev.
mikeytown2
4

Cara terbaik untuk menghilangkan kesalahan kebuntuan sekali dan untuk semua adalah modul Asynchronous Prefetch Database Query Cache .

Saya tidak bisa merekomendasikan ini cukup. Ditulis dengan cemerlang dan pencapaian kinerja yang luar biasa.

bmunslow
sumber