এসকিউএল সার্ভারের অনুসন্ধানগুলি মেমরিতে চলছে বা ডিস্কে চলছে কিনা তা নির্ধারণ করার কোনও উপায় আছে?


13

আমি আজ একটি অ্যাপ্লিকেশনে সঞ্চিত প্রক্রিয়াগুলির একটি সেট জুড়ে এসেছি যা দীর্ঘ চলমান প্রক্রিয়ার মধ্যে বারবার বলা হয়। প্রতিটি পদ্ধতির মধ্যে আমি একাধিক পৃথক নির্বাচনের বিবৃতি পেয়েছি, কিছু লুপের মধ্যে; অবাক হওয়ার মতো বিষয় নয়, বর্তমানে ব্যবহৃত এই রুটিনগুলি চালাতে বেশ কয়েক মিনিট সময় নেয়, যখন অন্তর্দৃষ্টিটি তাদের কয়েক সেকেন্ডের মধ্যে শেষ করবে বলে আশা করে।

এটি মোটামুটি সুস্পষ্ট বলে মনে হয় যে এই পদ্ধতিগুলি লেখার সময় পারফরম্যান্সকে বিবেচনায় নেওয়া হয়নি, এমন একাধিক উদাহরণ রয়েছে যা কেবল "একটি ভাল ধারণা নয়"।

ডেটা আমদানি করার সময় প্রতিটি সারিতে প্রক্রিয়াজাতকরণে সারি প্রতি 300 মিমি লাগে, তাই তুলনামূলকভাবে ছোট আমদানিগুলি প্রক্রিয়া করতে কয়েক মিনিট সময় নেয়।

তবে পদ্ধতিগুলির সাথে জড়িত সারণীগুলি বেশিরভাগ অংশের জন্য বেশ ছোট quite আমি ভাবছি, যদি এই টেবিলগুলির সমস্ত স্মৃতিতে পুরোপুরি বাসিন্দা থাকে তবে সম্ভবত এগুলির কোনওটি পুনরায় লেখার মাধ্যমে এত কিছু পাওয়া যায় না।

আমি নির্ধারণ করার চেষ্টা করছি .... স্পষ্টতই এই অদক্ষ কোডের জন্য এটি কতটা প্রকৃত প্রভাব ফেলছে? এটা ঠিক করা মূল্য?

সুতরাং প্রশ্নটি হল:
- কোন টেবিলগুলি মেমরিতে সম্পূর্ণ পিন করা আছে তা নির্ধারণ করার কোনও উপায় আছে?
- বিশেষভাবে ব্যয়বহুল অংশগুলি খুঁজে পেতে নেস্টেড স্টোরেজ পদ্ধতিগুলি নিরীক্ষণের জন্য ট্রেসিং চালু করার কোনও উপায় আছে কি?

দ্রষ্টব্য: এটি এসকিউএল সার্ভার ২০০৮ আর 2 এ রয়েছে

উত্তর:


12

মোট যৌক্তিক পঠন এবং মোট শারীরিক পঠন দেখতে আপনি এই দুটি প্রশ্নের একটি ব্যবহার করতে পারেন।

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 এর একটি ফ্যাক্টরের দ্বারা প্রয়োজনীয় লজিকাল রিডের পরিমাণ হ্রাস করা আপনার অনুরোধটিকে অনুরূপ ফ্যাক্টর দ্বারা গতি বাড়িয়ে তুলবে।

সুতরাং, একটি লজিকাল রিড একটি টেবিল স্ক্যানের সমতুল্য নয়, তবে একটি টেবিল স্ক্যান সূচীর চেয়ে অনেক বেশি যৌক্তিক পাঠের কারণ হয়ে থাকে।


> "... তাদের সংখ্যা হ্রাস করা (উদাহরণস্বরূপ উপযুক্ত সূচক যুক্ত করে) আপনার প্রশ্নগুলি আরও দ্রুত চালিত করতে পারে।" আপনি কী ব্যাখ্যা করতে পারেন যে একটি সূচি যুক্ত করা কীভাবে লজিক্যাল পাঠকে হ্রাস করবে? যৌক্তিক পাঠ কি টেবিল স্ক্যানের সমার্থক?

1
আমার উত্তর উপর একটি ব্যাখ্যা যুক্ত।
সেবাস্তিয়ান মেইন

ধন্যবাদ। এমনকি জড়িত সমস্ত টেবিলগুলিতে যথাযথ সূচকগুলি রয়েছে তা ধরে নিচ্ছি ... আমি মনে করি ডিস্ক থেকে পড়ার পরিবর্তে মেমরিতে একটি টেবিল পিন করা (উভয় পরিস্থিতিতে একই সূচকগুলি ধরে রাখুন) ... বা অন্যটিতে একটি বিশাল পারফরম্যান্সের পার্থক্য রয়েছে think শব্দগুলি, সূচকগুলি যুক্ত করা আপনাকে কম মেমরিযুক্ত মেশিনের তুলনায় প্রচুর র‌্যামযুক্ত একটি মেশিনে% পারফরম্যান্স বাড়িয়ে তুলবে .... সঠিক?

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

2
গৌণ নিটপিক - আমার মনে হয় পৃষ্ঠাগুলি 8kb :-)। ভাল উত্তর.
onupdatecascade

3
  • বিশেষভাবে ব্যয়বহুল অংশগুলি খুঁজে পেতে নেস্টেড স্টোরেজ পদ্ধতিগুলি নিরীক্ষণের জন্য ট্রেসিং চালু করার কোনও উপায় আছে কি?

আপনি এসকিউএল প্রোফাইলার ব্যবহার করতে পারেন। আপনি যখন ট্রেসটি শুরু করবেন, আপনার আরপিসি কমপ্লিট, এসপি স্টার্টিং, এসপি স্টেম্ট স্টার্টিং এবং এসপি স্টেমট কমপ্লিট (নীচের চিত্রটি দেখুন) চয়ন করা উচিত

এখানে চিত্র বর্ণনা লিখুন

এটি আপনাকে সঞ্চিত পদ্ধতির অভ্যন্তরে প্রতিটি ক্যোয়ারী দেখতে দেয়। এটি আপনাকে দেখতে দেবে যে নেস্টেড স্টোরেজ পদ্ধতিটি কতবার বলা হয়। ট্রেস শেষ হয়ে গেলে আপনার এটি সংরক্ষণ করা উচিত। তারপরে, এটি পুনরায় খুলুন এবং তারপরে, আপনি যে সমস্যার সমাধান করে তার কারণগুলি অনুসন্ধান করতে আপনি "" কলাম ফিল্টারগুলি "বোতাম দিয়ে) ফিল্টার করতে সক্ষম হবেন। (উদাঃ: x এর চেয়ে বেশি পড়ার প্রশ্নগুলি বা x সেকেন্ডের (সময়কাল) এর বেশি স্থায়ী ...

আমি আপনাকে যে প্রোফাইলার অপশনগুলি দেখিয়েছি তা কার্যকর করার পরিকল্পনাও দেখায়, যা অনেকখানি সহায়তা is


1

এটি একটি সাধারণ ক্যোয়ারী অপ্টিমাইজেশন প্রশ্নের মতো মনে হচ্ছে। আপনার বিবরণ থেকে আমি চাই:

  1. কোডটি সারি-সারি সারি প্রক্রিয়াজাতকরণ করে কিনা তা দেখুন। যদি এটি হয়, তবে প্রায়শই সেটগুলি ব্যবহার করে একই যুক্তি প্রয়োগ করে একসাথে প্রস্থের উন্নতির আদেশ দেওয়া যেতে পারে (একই সাথে একাধিক সারি প্রক্রিয়াজাত করা হয়)। অন্য কথায়, যদি এটি "প্রতিটি সারিটির উপরে লুপ" করে "এটিকে" সমস্ত সারি প্রক্রিয়াজাতকরণ "এর মতো করে কাজ করে। এসকিউএল এটিকে ছাড়িয়ে গেছে কারণ অপ্টিমাইজার আরও বেশি সম্ভাব্য পদ্ধতি থেকে বেছে নিতে পারে, সম্ভাব্যভাবে সমান্তরালতা ব্যবহার করতে পারে, এক-সারি-এ-এ-টাইম থেকে আসা প্রচুর ওভারহেড সরিয়ে ফেলতে পারে ।
  2. কাজটি সমর্থন করে এমন সূচীগুলি রয়েছে তার পরে, তা নিশ্চিত করুন। প্রায়শই, আবার পরিমাপের উন্নতির আদেশগুলি সঠিক সূচী বনাম না দিয়ে থাকতে পারে। এটি মেমরিতে এবং ডিস্ক অ্যাক্সেস সহ সত্য। বৃহত ডেটা সেটে যথাযথ সূচী না থাকলে র‍্যামের সমস্ত কিছু সহ প্রক্রিয়াগুলি এখনও কয়েক ঘন্টা সময় নিতে পারে।
  3. এরপরে, সেট যুক্তি এবং স্থিতি সূচী সহ, আমি প্রভাবিত ডেটা পৃষ্ঠাগুলি মেমরির সাথে খাপ খায় কিনা তা আমি দেখতে চাই। এই মুহুর্তে, যদি এখনও ডিস্ক অ্যাক্সেসের অনেক কিছু থাকে তবে শারীরিক পাঠ এবং ডিস্কের ক্রিয়াকলাপটি সন্ধান করা বোধগম্য হয় কারণ অপ্টিমাইজেশন থেকে সমস্ত বড় লাভ প্রথম দুটি পদক্ষেপে সম্পন্ন হয়।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.