মাইএসকিউএল স্ট্যাটাস ভেরিয়েবল হ্যান্ডলার_ড্রেড_আরএনড_নেক্সট অনেক বাড়ছে


11

এমওয়াইএসকিউএল স্থিতিতে, হ্যান্ডলার_প্রেম_আরঙ্ক_নেক্সট মানটি খুব বেশি।

আমি সচেতন যে, যখন কোনও কোয়েরি কার্যকর হয় যা যথাযথ সূচকগুলি না করে তখন এই মান বাড়ানো হবে।

তবে, এমনকি যখন আমরা 'হ্যান্ডলার_প্রেম_আরএনড_নেক্সট' এর মতো শো স্থিতি কার্যকর করি তখনও এই মানটি 2 দ্বারা বাড়ছে।

এই স্থিতি পতাকাটির ভিত্তিতে, আমরা কিছু পরিসংখ্যান পর্যবেক্ষণ করছি।

সুতরাং প্রতিবার, এই পরিসংখ্যান সমালোচনা প্রদর্শন করা হয়।

আমরা কি এই 'শো' এক্সিকিউশন গণনাগুলিকে 'হ্যান্ডলার_ড্রেড_রেন্ড_নেক্সট' গণনা থেকে বাদ দিতে পারি?

এর জন্য আরও একটি উদাহরণ,

10 টি সারি সহ একটি টেবিল রয়েছে, টেবিলটি কলাম 'ডেটা'-এ সূচিযুক্ত এবং যদি আমরা নিম্নলিখিত কোয়েরিটি সম্পাদন করি:

select data from test where data = 'vwx' -> returns one row

এবং যদি আমরা 'হ্যান্ডলার_আর_আরন্দ_সেক্সট' এর মানটি পরীক্ষা করি তবে এটি 7 দ্বারা বৃদ্ধি পেয়েছে।

উপরোক্ত প্রশ্নের জন্য ব্যাখ্যা কমান্ডের ফলাফল নিম্নলিখিত:

explain select data from test where data = 'vwx';

id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra

1, 'SIMPLE', 'test', 'ref', 'data', 'data', '35', 'const', 1, 'Using where; Using index'

এই মানটিকে সীমাবদ্ধ করার কোনও উপায় আছে, বা কেন এই মানটি খুব দ্রুত বাড়ানো হচ্ছে তা আমি জানতে পারি।


এটি কি আসলে কোনও পারফরম্যান্স সমস্যা তৈরি করে?
অ্যারন ব্রাউন 13

কোনও কার্যকারিতা ক্ষতিগ্রস্থ হচ্ছে না, তবে পর্যবেক্ষণের সরঞ্জামটি এই পতাকাটি পরীক্ষা করছে এবং সমালোচনা করছে।
ফণীন্দ্র

যদি কর্মক্ষমতা কোনও সমস্যা না হয় তবে তার পরিবর্তে মনিটরিং সরঞ্জামটি ঠিক করুন।
অ্যারন ব্রাউন

আমি অন্যান্য সরঞ্জামগুলি (মন্যোগ) দিয়েও পরীক্ষা করেছিলাম, সেখানেও একই সমস্যা।
ফণীন্দ্র 13

তাতে কি? এটি যদি কোনও পারফরম্যান্স সমস্যা তৈরি করে না তবে এটিকে উপেক্ষা করুন। এটি কেবল একটি কাউন্টার।
অ্যারন ব্রাউন 10

উত্তর:


5

সবার আগে, আসুন আমরা হ্যান্ডলার_প্রেম_আরন্দ_সংশ্লিষ্ট সংজ্ঞাটি দেখি।

Handler_read_rnd_next এ মাইএসকিউএল ডকুমেন্টেশন অনুসারে:

ডেটা ফাইলে পরবর্তী সারিতে পড়া অনুরোধের সংখ্যা। আপনি যদি অনেকগুলি টেবিল স্ক্যান করে থাকেন তবে এই মানটি বেশি। সাধারণত এটি পরামর্শ দেয় যে আপনার টেবিলগুলি যথাযথভাবে সূচিকৃত নয় বা আপনার প্রশ্নগুলি আপনার সূচকগুলির সুবিধা নিতে লেখা হয়নি।

এখন, আপনার প্রশ্নটি দেখুন:

select data from test where data = 'vwx';

আপনি বলেছিলেন যে টেবিলটিতে 10 টি সারি রয়েছে। থাম্বের নিয়ম হিসাবে, মাইএসকিউএল ক্যোরি অপটিমাইজার একটি সূচকের ব্যবহারকে বরখাস্ত করবে যদি পরীক্ষার জন্য সারিগুলির সংখ্যা সারিগুলির মোট সংখ্যার 5% বেশি হয়।

আমাদের গণিত করা যাক। 10 টি সারির 5% হ'ল 0.5 সারি। এমনকি যদি আপনার ডেটা সনাক্ত করতে সারিগুলির সংখ্যা প্রয়োজন হয় তবে এটি 0.5 এর বেশি than এই সারিগুলির কম সংখ্যক সারণি এবং আমি সূচক নিয়মের ভিত্তিতে মাইএসকিউএল ক্যোয়ারী অপটিমাইজার সর্বদা একটি টেবিল স্ক্যান করবে।

যেহেতু কলামটি dataনিজেই সূচিযুক্ত, তাই কোনও টেবিল স্ক্যানের পরিবর্তে, মাইএসকিএল একটি সূচক স্ক্যান সম্পাদন করেছিল।

আপনি যদি নিশ্চিতভাবে জানেন যে পরীক্ষার টেবিলটি কখনই বাড়বে না, আপনি সমস্ত সূচি সরিয়ে ফেলতে পারেন এবং টেবিল স্ক্যানগুলি ঘটতে দিতে পারেন let হ্যান্ডলারের স্থিতি ভেরিয়েবলগুলি বৃদ্ধি বৃদ্ধি করা উচিত।


হাই, উত্তর দেওয়ার জন্য ধন্যবাদ। আমি সূচীটি সরিয়ে চেষ্টা করেছি এবং কোয়েরি সম্পাদন করে মানটি পরীক্ষা করেছি। তবে হ্যান্ডলারের_আপনি_রঙ্ক_নেক্সটের মান 18 দ্বারা বাড়ছে যা সূচক সহ 7 দ্বারা বৃদ্ধি পেয়েছিল। আমি যে টেবিলটি উল্লেখ করেছি তা স্থির নয়। এটি একটি উদাহরণ, আমি টেবিলে আরও 70 টি সারি সন্নিবেশ করিয়েছি, সুতরাং মোট সারি 80 হয় এবং কলাম 'ডেটা' তে সূচী দিয়ে একই ক্যোয়ারী চালিত করে যা এখনও কেবল একটি সারি দেয়। তবে এখনও যখন আমি 'হ্যান্ডলার_প্রাণ_আরন্দ_নেক্সট' এর মানটি যাচাই করি, তখনও এটি 7 বৃদ্ধি করে।
ফণীন্দ্র

আমি যে সঠিক কারণগুলি দিয়েছিলাম সেগুলি এখনও প্রয়োগ হয়। একটি সূচক স্ক্যান করা হয়েছিল। এবার, একটি পূর্ণ সূচকের প্রয়োজন ছিল না। স্পষ্টতই, এক সারি পেতে সূচকের বিটিআরআর 7 টি পাতার নোডগুলি ট্র্যাভার করতে হয়েছিল। হ্যান্ডলারের স্থিতি কাউন্টারগুলি সূচক ব্যবহার প্রকাশ করে। সীমাবদ্ধ করার একমাত্র উপায় হ'ল আমি যা বলেছি তত সূচি মুছে ফেলা। অন্যথায়, এটি সর্বদা প্রত্যাশিত আচরণ। আরও জটিল টেবিল কাঠামো এবং সঠিকভাবে ডিজাইন করা ক্যোয়ারীগুলির আরও ভাল সূচীকরণ হ্যান্ডলার গণনা হ্রাস করতে পারে তবে এগুলি কখনই সম্পূর্ণ অপসারণ করতে পারে না।
রোল্যান্ডোমাইএসকিউএলডিবিএ

"থাম্বের নিয়ম হিসাবে, মাইএসকিউএল ক্যোরি অপ্টিমাইজার সূচকের ব্যবহারকে বরখাস্ত করবে যদি পরীক্ষাগুলির সারিগুলির সংখ্যা সারিগুলির মোট সংখ্যার 5% এর চেয়ে বেশি হয়।" - এটি জানতে খুব সাহায্যকারী। এটি সমর্থন করে এমন কোনও অফিসিয়াল ডকুমেন্টেশন রয়েছে কি? তোমাকে অনেক ধন্যবাদ!
আইটোকটপাস

2

মাইএসকিউএল এর কোন সংস্করণ?

এই পতাকাটি কেন বাড়বে তার কারণগুলি এখানে ডকুমেন্টেড: http://www.mysqlperformanceblog.com/2010/06/15/ কি-does-handler_read_rnd-mean /

সংক্ষেপে, এটি একটি সম্পূর্ণ বা আংশিক টেবিল স্ক্যানের সময় ক্রমে প্রাপ্ত সারিগুলির সংখ্যার পাল্টা।

এখন, এটি বলেছিল, আমি একটি আলাদা ফলাফল পাচ্ছি:

mysql> CREATE TABLE `test` (
    ->   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    ->   `data` varchar(255) NOT NULL,
    ->   PRIMARY KEY (`id`),
    ->   KEY `data` (`data`)
    -> ) ENGINE=InnoDB;
Query OK, 0 rows affected (0.27 sec)

mysql> INSERT INTO test (data) VALUES ('a'), ('b'), ('c'), ('d'), ('e'), ('f'), ('g'), ('h'), ('i'), ('vwx');
Query OK, 10 rows affected (0.06 sec)
Records: 10  Duplicates: 0  Warnings: 0

mysql> FLUSH STATUS;
Query OK, 0 rows affected (0.07 sec)

mysql> select data from test where data = 'vwx';
+------+
| data |
+------+
| vwx  |
+------+
1 row in set (0.04 sec)

mysql> SHOW SESSION STATUS LIKE 'Handler%';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Handler_commit             | 1     |
| Handler_delete             | 0     |
| Handler_discover           | 0     |
| Handler_prepare            | 0     |
| Handler_read_first         | 0     |
| Handler_read_key           | 3     |
| Handler_read_last          | 0     |
| Handler_read_next          | 1     |
| Handler_read_prev          | 0     |
| Handler_read_rnd           | 0     |
| Handler_read_rnd_next      | 0     |
| Handler_rollback           | 0     |
| Handler_savepoint          | 0     |
| Handler_savepoint_rollback | 0     |
| Handler_update             | 0     |
| Handler_write              | 0     |
+----------------------------+-------+
16 rows in set (0.15 sec)

0

যদি "ডেটা" কলামে কোনও অনন্য / প্রাথমিক সূচি থাকে তবে আপনি ইতিমধ্যে এই প্রশ্নের জন্য অপ্টিমাইজেশন সম্পন্ন করেছেন। আমি আরও অপ্টিমাইজেশন এটি করা যেতে পারে ভাবতে পারি না।

এছাড়াও আপনি যাচাই করতে পারবেন পুরো টেবিল স্ক্যান হয়েছে কিনা?

SHOW STATUS like 'select_scan'; 
SELECT data from test where data='vmx';
SHOW STATUS like 'select_scan'; 

নিশ্চিত করুন যে নির্বাচন_স্ক্যান এর মান বাড়িয়েছে না, এই পদ্ধতিতে আপনি পুরো টেবিলে স্ক্যানটি সম্পন্ন হয়েছে কিনা তা পরীক্ষা করে দেখতে পারেন, আপনার এমন একটি কোয়েরি অনুকূলিত করার চেষ্টা করা উচিত যা পুরো টেবিল স্ক্যানটি করবে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.