আমি কোন প্রতিশ্রুতি ছাড়াই কিছু প্রশ্ন করেছি। তারপরে আবেদন বন্ধ হয়ে যায়।
আমি কীভাবে এই উন্মুক্ত লেনদেনগুলি প্রদর্শন করতে পারি এবং তাদের প্রতিশ্রুতিবদ্ধ বা বাতিল করতে পারি?
আমি কোন প্রতিশ্রুতি ছাড়াই কিছু প্রশ্ন করেছি। তারপরে আবেদন বন্ধ হয়ে যায়।
আমি কীভাবে এই উন্মুক্ত লেনদেনগুলি প্রদর্শন করতে পারি এবং তাদের প্রতিশ্রুতিবদ্ধ বা বাতিল করতে পারি?
উত্তর:
আমি কীভাবে এই উন্মুক্ত লেনদেনগুলি প্রদর্শন করতে পারি এবং তাদের প্রতিশ্রুতিবদ্ধ বা বাতিল করতে পারি?
কোনও উন্মুক্ত লেনদেন নেই, সংযোগ বিচ্ছিন্ন হওয়ার পরে মাইএসকিউএল লেনদেনকে রোলব্যাক করবে।
আপনি লেনদেন করতে পারবেন না (IFAIK)
আপনি থ্রেড ব্যবহার করে প্রদর্শন করুন
SHOW FULL PROCESSLIST
দেখুন: http://dev.mysql.com/doc/refman/5.1/en/thread-inifications.html
এটি আপনাকে সাহায্য করবে না, কারণ আপনি ভাঙা সংযোগ থেকে কোনও লেনদেন করতে পারবেন না।
মাইএসকিউএল ডক্স থেকে কোনও সংযোগ বিচ্ছিন্ন হয়ে গেলে কী ঘটে : http://dev.mysql.com/doc/refman/5.0/en/mysql-tips.html
4.5.1.6.3। MySQL অটো-পুনঃসংযোগ অক্ষম করা হচ্ছে
বিবৃতি প্রেরণের সময় যদি মাইএসকিএল ক্লায়েন্ট সার্ভারের সাথে তার সংযোগটি হারিয়ে ফেলে তবে তা অবিলম্বে এবং স্বয়ংক্রিয়ভাবে একবার সার্ভারে পুনরায় সংযোগ স্থাপনের চেষ্টা করে আবার বিবৃতিটি প্রেরণ করে send যাইহোক , এমনকি যদি মাইএসকিএল পুনরায় সংযোগে সফল হয় তবে আপনার প্রথম সংযোগটি শেষ হয়ে গেছে এবং আপনার পূর্ববর্তী সমস্ত সেশন অবজেক্ট এবং সেটিংস হারিয়ে গেছে : অস্থায়ী টেবিল, স্বতঃসংশ্লিষ্ট মোড এবং ব্যবহারকারী-সংজ্ঞায়িত এবং সেশন ভেরিয়েবলগুলি। এছাড়াও, যে কোনও বর্তমান লেনদেন পিছনে ফিরে আসে ।
এই আচরণটি আপনার জন্য বিপজ্জনক হতে পারে, যেমন নিম্নলিখিত উদাহরণে যেমন সার্ভারটি বন্ধ হয়ে গেছে এবং আপনি এটি না জেনে প্রথম এবং দ্বিতীয় বিবৃতিগুলির মধ্যে পুনরায় চালু করেছেন:
আরও দেখুন: http://dev.mysql.com/doc/refman/5.0/en/auto-reconnect.html
কীভাবে এটি নির্ধারণ এবং ঠিক
করতে হবে স্বয়ংক্রিয় পুনঃসংযোগের জন্য চেক করতে:
যদি একটি স্বয়ংক্রিয় পুনরায় সংযোগ ঘটে (উদাহরণস্বরূপ, মাইএসকিএল_পিং () কল করার ফলে), এর কোনও সুস্পষ্ট ইঙ্গিত নেই। পুনরায় সংযোগ পরীক্ষা করার জন্য, কল
mysql_thread_id()করার আগে আসল সংযোগ শনাক্তকারীকে কল করুনmysql_ping(), তারপরেmysql_thread_id()সনাক্তকারী পরিবর্তন হয়েছে কিনা তা দেখতে আবার কল করুন ।
নিশ্চিত হয়ে নিন যে আপনি আপনার শেষ ক্যোয়ারী (লেনদেন) ক্লায়েন্টে রেখেছেন যাতে প্রয়োজন হলে আপনি এটি পুনরায় জমা দিতে পারেন।
এবং স্বয়ংক্রিয় পুনঃসংযোগ মোডটি অক্ষম করুন, কারণ এটি বিপজ্জনক, পরিবর্তে আপনার নিজের পুনরায় সংযোগটি প্রয়োগ করুন, যাতে কোনও ড্রপ কখন ঘটে তা আপনি জানতে পারেন এবং আপনি সেই ক্যোয়ারীটি পুনরায় জমা দিতে পারেন।
mysqld.dllওরফে ক্লায়েন্ট এবং আপনি যাতে এসকিউএল স্টেটমেন্ট মেমরি পূর্ণ লেনদেনের রয়েছে, যাতে করে আপনি এটি ফিরিয়ে প্লে করতে পারেন যখন সংযোগ ড্রপ। অথবা আপনি এটিকে স্থানীয়ভাবে ডিস্কে রাখুন, যাতে পুনরায় চালু করার পরে আপনি এটি পুনরায় জমা দিতে পারেন।
যদিও মামলায় আর কোনও লেনদেন হবে না, যেমনটি @ জোহান বলেছিলেন, আপনি চাইলে নীচের ক্যোয়ারী সহ আপনি বর্তমান লেনদেনের তালিকাটি ইনোডিবিতে দেখতে পারেন।
SELECT * FROM information_schema.innodb_trx\G
দস্তাবেজ থেকে :
INNODB_TRX টেবিলটিতে প্রতিটি লেনদেনের তথ্য রয়েছে (কেবল পঠনযোগ্য কেবলমাত্র লেনদেন বাদে) InnoDB- র মধ্যে বর্তমানে লেনদেন শুরু হওয়ার সময় লকটির জন্য অপেক্ষা করছে কিনা, এবং এসকিউএল বিবৃতি লেনদেনটি কার্যকর করছে কিনা তা সহ।
\Gআপনি মাইএসকিএল সিএলআই সরঞ্জামটির মধ্যে কোয়েরি আউটপুটটি ফর্ম্যাট করতে চাইলে শেষে পরিবর্তকটি কার্যকর। আপনি যদি মাইএসকিএল ওয়ার্কবেঞ্চের মতো জিইউআই সরঞ্জাম ব্যবহার করেন তবে আপনার এটির দরকার নেই।
ইনোডিবি ইঞ্জিনের অভ্যন্তরে বর্তমানে থাকা সমস্ত ক্রিয়াগুলির তালিকা পেতে আপনি show innodb status(বা show engine innodb statusমাইএসকিএলের নতুন সংস্করণগুলির জন্য) ব্যবহার করতে পারেন । আউটপুট দেয়ালে সমাহিত হ'ল লেনদেন হবে এবং কোন আভ্যন্তরীণ প্রক্রিয়া আইডি এর অধীনে চলছে।
আপনি এই লেনদেনগুলির প্রতিশ্রুতিবদ্ধতা বা রোলব্যাক জোর করতে সক্ষম হবেন না, তবে আপনি মাইএসকিউএল প্রক্রিয়াটি চালাতে পারেন, যা মূলত একটি রোলব্যাক পর্যন্ত ফোটে। এটি প্রক্রিয়াগুলির সংযোগটি মেরে ফেলে এবং মাইএসকিউএলকে এর বাম দিকে জঞ্জাল পরিষ্কার করতে দেয়।
আপনি যা দেখতে চান তা এখানে:
------------
TRANSACTIONS
------------
Trx id counter 0 140151
Purge done for trx's n:o < 0 134992 undo n:o < 0 0
History list length 10
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0 0, not started, process no 17004, OS thread id 140621902116624
MySQL thread id 10594, query id 10269885 localhost marc
show innodb status
এই ক্ষেত্রে, এখনই InnoDB ইঞ্জিনের সাথে কেবল একটি সংযোগ রয়েছে (আমার লগইন, showক্যোয়ারী চালাচ্ছে )। যদি সেই লাইনটি কোনও আসল সংযোগ / আটকে যাওয়া লেনদেন হয় তবে আপনি শেষ করতে চান, তবে আপনি একটি করতে চান kill 10594।
show engine innodb status?
সমস্ত তালিকা:
SHOW FULL PROCESSLIST
যদি আপনি এই আদেশটি ব্যবহার করে একটি হ্যাং ট্রানজেকশন অনুলিপি লেনদেনের আইডি এবং লেনদেনকে হত্যা করতে চান:
KILL <id> // e.g KILL 16543