মোট যৌক্তিক পঠন এবং মোট শারীরিক পঠন দেখতে আপনি এই দুটি প্রশ্নের একটি ব্যবহার করতে পারেন।
SELECT DB_NAME(st.dbid) Db,
OBJECT_NAME(st.objectid, st.dbid) Prc,
qs.execution_count,
qs.total_logical_reads,
qs.total_physical_reads,
qs.statement_start_offset,
qs.statement_end_offset,
st.text
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st;
SELECT DB_NAME(database_id) Db,
OBJECT_NAME(object_id, database_id) Prc,
execution_count,
total_logical_reads,
total_physical_reads
FROM sys.dm_exec_procedure_stats ps;
প্রথমটি এটিকে বিবৃতি দিয়ে ভেঙে দেয়, দ্বিতীয়টি সম্পূর্ণ পদ্ধতিতে গণনা করে।
ফিজিকাল রিডগুলি ডিস্কের বিপরীতে পড়া হয়, লজিকাল রিডগুলি স্মৃতির বিপরীতে। আপনার সিস্টেমে কোন পদ্ধতি বা বিবৃতি সবচেয়ে ব্যয়বহুল সেগুলি সনাক্ত করতে আপনি এটি ব্যবহার করতে পারেন এবং সেগুলি টিউন করার চেষ্টা করতে পারেন।
মনে রাখবেন যে, লজিক্যাল রিডগুলি শারীরিক পাঠের তুলনায় উল্লেখযোগ্যভাবে সস্তা হলেও এগুলি এখনও ব্যয়বহুল, সুতরাং তাদের সংখ্যা হ্রাস করা (উদাহরণস্বরূপ উপযুক্ত সূচক যুক্ত করে) আপনার অনুসন্ধানগুলি আরও দ্রুত চালাতে পারে।
উপরে ডিএমভিগুলিতে প্রচুর অতিরিক্ত কলাম রয়েছে যা আপনি আকর্ষণীয়ও বোধ করতে পারেন।
যৌক্তিক পাঠ কমাতে কোনও সূচক কীভাবে সহায়তা করে?
এসকিউএল সার্ভারে সমস্ত ডেটা ব্লকগুলিতে, 8KB আকারে সংগঠিত হয়। এই ব্লকগুলিকে "পৃষ্ঠাগুলি" বলা হয়।
প্রতিটি সারণীতে "মেটা" পৃষ্ঠাগুলি রয়েছে যা টেবিলের স্ট্রুক্টুর পাশাপাশি পাতার পৃষ্ঠাগুলির তথ্য ধারণ করে। যদি কোনও সূচক বিদ্যমান না থাকে এবং আপনি SELECT * FROM tbl WHERE Id = 7
এসকিউএল সার্ভারের মতো কোনও ক্যোয়ারী চালান তবে পুরো টেবিলটিতে এই বা এই সারিগুলির সন্ধান করতে হবে। সুতরাং এটি একবারে একটি পৃষ্ঠায় পড়ে, ধারাটিতে উপযুক্ত সারিগুলি নির্ধারণ করার জন্য প্রতিটি পৃষ্ঠার সমস্ত সারি থেকে লুপ করে WHERE
। সুতরাং যদি টেবিলটির জন্য 1,000,000 পৃষ্ঠাগুলি সংরক্ষণের প্রয়োজন হয় তবে এই ক্যোয়ারীটি কার্যকর করতে 1,000,000 লজিকাল রিড নেবে।
আপনার যদি একটি সূচক থাকে, এসকিউএল সার্ভার পৃষ্ঠাগুলির মধ্যে লজিক্যালি ডেটা সাজায় এবং পৃষ্ঠাগুলির মধ্যে একটি লিঙ্কযুক্ত তালিকা স্থাপন করে। এটি ORDER BY
ব্যয়বহুল বাছাইয়ের ক্রিয়াকলাপ ছাড়াই চালানো ক্যুরিগুলি কার্যকর করতে দেয় । তবে মুর এই গুরুত্বপূর্ণ যে বাছাই করা, এসকিউএল সার্ভার টেবিলটিতে একটি বি + ট্রি যুক্ত করে। একটি বি + ট্রি একটি বইয়ের সূচকের সাথে তুলনীয় একটি কাঠামো, যেখানে একটি নির্দিষ্ট কীওয়ার্ড সন্ধানের সাহায্যে মূল পৃষ্ঠাতে সরাসরি কীওয়ার্ড যুক্ত থাকতে পারে word টিপিক্যাল বইটিতে কেবল একটি সূচক স্তর রয়েছে যেখানে একটি বি + ট্রিতে একাধিক থাকতে পারে। কেবল একটি বৃহত বইয়ের কথা চিন্তা করুন, যেখানে সূচি নিজেই একাধিক পৃষ্ঠাগুলি দীর্ঘ। মতো এটা জ্ঞান একটি অ্যাড অতিরিক্ত সূচক স্তর কোনটা পৃষ্ঠাতে আমাদেরকে বলে যে দিয়ে শুরু সূচক শব্দ তোলে ক্ষেত্রে S
পাওয়া যাবে আছে।
বি + গাছগুলি সম্পত্তি প্রদানের সময় যথাসম্ভব কয়েকটি স্তরের জন্য অনুকূলিত হয় যা সূচকে প্রতিটি রেকর্ড সূচক স্তরের প্রতি পৃষ্ঠায় পড়ে পাওয়া যায়। সুতরাং WHERE Id = 7
যখন আপনার সূচী অনুসারে বাছাই করা হবে তখন উপরের প্রশ্নটি ধরে নিন Id
। ধরা যাক সূচকের 5 স্তর রয়েছে। এখন, এই ক্যোয়ারির সাথে মেলে এমন সমস্ত রেকর্ড সন্ধান করতে আমাকে সূচক স্তর প্রতি একটি পৃষ্ঠা পড়তে হবে (এটি 5 পৃষ্ঠাগুলি) his এটির একটি "সূচক সিক" বলা হয়। যদি বিলটিতে ফিট করে এমন একাধিক রেকর্ড থাকে তবে সেগুলি পুনরুদ্ধার করার জন্য আমাকে কিছু সময়ের জন্য বাছাই করা সূচকটি অনুসরণ করতে হতে পারে। তবে ধরে নেওয়া যাক শুধুমাত্র একটি রেকর্ড রয়েছে।
সুতরাং, সূচীটি চালনা ছাড়াই এই ক্যোয়ারির জন্য ১,০০,০০০ পাঠের প্রয়োজন হয়, ইনড সহ এটি ৫ টি পঠন প্রয়োজন required যদিও একটি যৌক্তিক পঠন একটি মেমরির ক্রিয়াকলাপ হয় তবে সেখানে যথেষ্ট পরিমাণে ব্যয় হয় - প্রকৃতপক্ষে এটি উপরের মত একটি তুচ্ছ প্রশ্নের মধ্যে সবচেয়ে ব্যয়বহুল অপারেশন। সুতরাং 200,000 এর একটি ফ্যাক্টরের দ্বারা প্রয়োজনীয় লজিকাল রিডের পরিমাণ হ্রাস করা আপনার অনুরোধটিকে অনুরূপ ফ্যাক্টর দ্বারা গতি বাড়িয়ে তুলবে।
সুতরাং, একটি লজিকাল রিড একটি টেবিল স্ক্যানের সমতুল্য নয়, তবে একটি টেবিল স্ক্যান সূচীর চেয়ে অনেক বেশি যৌক্তিক পাঠের কারণ হয়ে থাকে।