Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

DEADLOCK APPARENT Membuat utas darurat untuk tugas tertunda yang belum ditetapkan

Dari http://www.mchange.com/projects/c3p0/#other_ds_configuration

numHelperThreads dan maxAdministrativeTaskTime membantu mengonfigurasi perilaku kumpulan utas DataSource. Secara default, setiap DataSource hanya memiliki tiga utas pembantu terkait. Jika kinerja tampaknya terseret di bawah beban berat, atau jika Anda mengamati melalui JMX atau pemeriksaan langsung dari PooledDataSource, bahwa jumlah "tugas yang tertunda" biasanya lebih besar dari nol, coba tingkatkan numHelperThreads. maxAdministrativeTaskTime mungkin berguna bagi pengguna yang mengalami tugas yang menggantung tanpa batas waktu dan pesan "APPARENT DEADLOCK". (Lihat Lampiran A untuk informasi lebih lanjut.)

maxAdministrativeTaskTime Default:0 Detik sebelum kumpulan utas c3p0 akan mencoba mengganggu tugas yang tampaknya macet. Jarang berguna. Banyak fungsi c3p0 tidak dilakukan oleh utas klien, tetapi secara asinkron oleh kumpulan utas internal. asynchrony c3p0 meningkatkan kinerja klien secara langsung, dan meminimalkan lamanya waktu kunci kritis ditahan dengan memastikan bahwa operasi jdbc lambat dilakukan di utas non-lock-holding. Namun, jika beberapa tugas ini "menggantung", yaitu mereka tidak berhasil atau gagal dengan Pengecualian untuk jangka waktu yang lama, kumpulan utas c3p0 dapat menjadi habis dan tugas administratif dicadangkan. Jika tugasnya lambat, cara terbaik untuk menyelesaikan masalah adalah dengan menambah jumlah utas, melalui numHelperThreads . Tetapi jika tugas terkadang hang tanpa batas, Anda dapat menggunakan parameter ini untuk memaksa panggilan ke metode interupsi () utas tugas jika tugas melebihi batas waktu yang ditetapkan. [c3p0 akhirnya akan pulih dari tugas yang digantung dengan memberi sinyal "APPARENT DEADLOCK" (Anda akan melihatnya sebagai peringatan di log), mengganti utas tugas kumpulan utas, dan menginterupsi() utas asli. Tetapi membiarkan kumpulan masuk ke APPARENT DEADLOCK dan kemudian pulih berarti bahwa untuk beberapa periode, kinerja c3p0 akan terganggu. Jadi, jika Anda melihat pesan ini, meningkatkan numHelperThreads dan menyetel maxAdministrativeTaskTime mungkin membantu . maxAdministrativeTaskTime harus cukup besar sehingga setiap upaya resonable untuk memperoleh Koneksi dari database, untuk menguji Koneksi, atau dua menghancurkan Koneksi, diharapkan berhasil atau gagal dalam waktu yang ditetapkan. Nol (default) berarti tugas tidak pernah terputus, yang merupakan kebijakan terbaik dan teraman dalam sebagian besar keadaan. Jika tugas hanya lambat, alokasikan lebih banyak utas. Jika tugas terhenti selamanya, coba cari tahu alasannya, dan mungkin pengaturan maxAdministrativeTaskTime dapat membantu untuk sementara.

The default is 3 for numHelperThreads , increase this to 8-10 

setting maxAdministrativeTaskTime will help 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mendefinisikan batasan unik pada kolom tabel MySQL di Ruby on Rails 3?

  2. Cara Menemukan Jumlah Hari Antara Dua Tanggal di MySQL

  3. Bagaimana cara mengembalikan id pada Sisipan dengan mybatis di mysql dengan anotasi

  4. Mengapa java.sql.DriverManager.getConnection(...) hang?

  5. php/mysql dengan banyak kueri