উত্তর:
InnoDB টেবিল এবং ক্যাভ্যাটগুলির জন্য মার্কোর লিঙ্কটি দেখুন।
মাইআইএসএএম এর জন্য, এটি কোনও মৃত সহজ "এটি আপত্তিজনক ক্যোয়ারী" সমাধান নয়। আপনার সর্বদা একটি প্রক্রিয়া তালিকা দিয়ে শুরু করা উচিত। তবে পুরো কীওয়ার্ডটি অবশ্যই অন্তর্ভুক্ত করবেন তা নিশ্চিত করুন যাতে মুদ্রিত প্রশ্নগুলি কাটা না যায়:
SHOW FULL PROCESSLIST;
এটি আপনাকে সমস্ত বর্তমান প্রক্রিয়াগুলির তালিকা, তাদের এসকিউএল কোয়েরি এবং রাজ্যের তালিকা প্রদর্শন করবে। এখন সাধারণত যদি একটি একক জিজ্ঞাসা অন্য অনেককে লক করার কারণ হয়ে থাকে তবে এটি চিহ্নিত করা সহজ হওয়া উচিত। ক্ষতিগ্রস্থ অনুসন্ধানগুলির একটি স্থিতি থাকবে Locked
এবং আপত্তিজনক ক্যোয়ারী নিজে থেকেই বসে থাকবে, সম্ভবত অস্থায়ী টেবিলের মতো নিবিড় কিছু করার জন্য অপেক্ষা করছে।
যদি এটি সুস্পষ্ট না হয় তবে আপনাকে এসকিউএল ছাড়ের আপনার ক্ষমতাগুলি নির্ধারণ করতে হবে যে কোনও আপত্তিজনক এসকিউএল আপনার সমস্যাগুলির কারণ হতে পারে determine
আপনি যদি InnoDB ব্যবহার করেন এবং আমার প্রস্তাবিত চলমান অনুসন্ধানগুলি চেক করা দরকার need
show engine innodb status;
যেমন মার্কোর লিঙ্কে উল্লিখিত এটি আপনাকে লকিংয়ের ক্যোয়ারী দেবে, এটির দ্বারা কতগুলি সারি / সারণী লক করা আছে ইত্যাদি ট্রান্সএকশনের নীচে দেখুন।
ব্যবহারের SHOW PROCESSLIST
ক্ষেত্রে সমস্যাটি হ'ল অন্য প্রশ্নগুলি সারিবদ্ধ না হওয়া পর্যন্ত আপনি লকগুলি দেখতে পাবেন না।
চেষ্টা করুন SHOW OPEN TABLES
:
show open tables where In_Use > 0 ;
উত্তরের কোনওটিই বর্তমানে অনুষ্ঠিত সমস্ত লকটি প্রদর্শন করতে পারে না।
টার্মিনালে যেমন mysql এ এটি করুন।
start transaction;
update someTable set name="foobar" where ID=1234;
-- but no rollback or commit - just let it sit there
স্পষ্টত উপরে লেনদেন একটি লক ধরে, কারণ লেনদেন এখনও সক্রিয়। তবে এখনই কোনও জিজ্ঞাসা চলছে না এবং কেউ কোথাও লকটির জন্য অপেক্ষা করছে না (এখনও কমপক্ষে)।
INFORMATION_SCHEMA.INNODB_LOCKS
খালি, যা ডকুমেন্টেশন প্রদত্ত বোঝায় , কারণ এখানে কেবলমাত্র একটি লেনদেন রয়েছে এবং বর্তমানে কেউই কোনও লকের জন্য অপেক্ষা করছে না waiting এছাড়াও INNODB_LOCKS
যাইহোক হ্রাস করা হয়।
SHOW ENGINE INNODB STATUS
অকেজো: someTable
মোটেই উল্লেখ করা হয় না
SHOW FULL PROCESSLIST
খালি, কারণ অপরাধী আসলে এই মুহূর্তে কোনও অনুসন্ধান চালাচ্ছে না।
আমার অন্যান্য উত্তরে বর্ণিত রূপ হিসাবে অতীতে সক্রিয় লেনদেনগুলি কার্যকর করেছে এমন প্রশ্নগুলি আপনি ব্যবহার করতে পারেন এবং তা বের করতে পারেন INFORMATION_SCHEMA.INNODB_TRX
, তবে উপরের দৃশ্যে লক আছে কিনা তা দেখার জন্য আমি কোনওভাবেই পৌঁছতে পারি নি ।performance_schema.events_statements_history
performance_schema.threads
someTable
এখনও পর্যন্ত অন্যান্য উত্তরের পরামর্শগুলি কমপক্ষে সহায়তা করবে না।
দাবি অস্বীকার: আমার ইনোটপ ইনস্টল নেই এবং আমি বিরক্তও করি নি। সম্ভবত যে কাজ করতে পারে ।
আফাইক এমআইএসকিউএল- তে এখনও কোনও নেটিভ উপায় নেই, তবে আমি ইনোটপ ব্যবহার করি । এটি নিখরচায় রয়েছে এবং প্রচুর পরিমাণে অন্যান্য কার্যকারিতাও রয়েছে।
আরো দেখুন এই লিঙ্কে innotop টুল ব্যবহার করে আরও তথ্যের জন্য।
রেফারেন্স এই পোস্ট থেকে নেওয়া।
আপনি নীচে স্ক্রিপ্ট ব্যবহার করতে পারেন:
SELECT
pl.id
,pl.user
,pl.state
,it.trx_id
,it.trx_mysql_thread_id
,it.trx_query AS query
,it.trx_id AS blocking_trx_id
,it.trx_mysql_thread_id AS blocking_thread
,it.trx_query AS blocking_query
FROM information_schema.processlist AS pl
INNER JOIN information_schema.innodb_trx AS it
ON pl.id = it.trx_mysql_thread_id
INNER JOIN information_schema.innodb_lock_waits AS ilw
ON it.trx_id = ilw.requesting_trx_id
AND it.trx_id = ilw.blocking_trx_id