এসকিউএল সার্ভার ২০০৮ এর সাথে স্মৃতিতে কোনও সূচককে বাধ্য করার কোনও উপায় আছে কি?


10

আমি কয়েক মিলিয়ন সারি সহ একটি টেবিল পেয়েছি, সেখান থেকে সময়ে সময়ে আমাকে কিছু প্রশ্ন চালানো দরকার। প্রথম ক্যোয়ারীটি সাধারণত বেশ ধীর হয়ে যায় (প্রায় 10s) এবং পরবর্তী প্রশ্নগুলি সাধারণত দ্রুততর হয় (প্রায় 1s)। কয়েক ঘন্টা পরে, একটি ধীর / তারপরে দ্রুত চক্র আবার শুরু হয়।

আমি আমার কার্যনির্বাহী পরিকল্পনায় যাচাই করেছি যে সমস্ত প্রয়োজনীয় সূচক উপস্থিত ছিল এবং যথাযথভাবে ব্যবহৃত হয়েছিল এবং আমি ধরে নিয়েছি পারফরম্যান্সের পার্থক্যটি এই কারণে হয়েছে যে সূচকটি পরবর্তী প্রশ্নের জন্য স্মৃতিতে রয়েছে (আমি কি ঠিক আছি, বা অন্য কোনও আছে) সম্ভাব্য কারণ?)

আমি সূচকগুলি ব্যবহার করে অন্যান্য প্রচুর প্রশ্নও চালাচ্ছি, তবে এই প্রশ্নগুলি কম সময়সাপেক্ষ এবং তাদের কার্য সম্পাদন কম সমালোচিত, তাই আমি উদ্বিগ্ন those সূচকগুলি আসলে আমার সমালোচনামূলক সূচকটিকে মেমরি ক্যাশের বাইরে ঠেলে দিচ্ছে।

সুস্পষ্ট 'অ্যাড মোর র‌্যাম' ফিক্স বাদে, সূচিটিকে স্মৃতিতে ফিরিয়ে আনতে আমি প্রতি ঘন্টা ঘন্টা চালানোর জন্য ডামি প্রশ্নগুলি স্ক্রিপ্ট করার কথা ভাবছিলাম।

এটি করার জন্য আরও কি মার্জিত উপায় আছে? এসকিউএল সার্ভারকে ইঙ্গিত করার মতো যে এটিতে যদি কেবলমাত্র একটি একক সূচককে ক্যাশে রাখতে পর্যাপ্ত মেমরি থাকে তবে তা সেই হওয়া উচিত?

আমি জানি যে সাধারণত এসকিউএল সার্ভারকে সবচেয়ে ভাল জিনিসটি সেই ধরণের জিনিসগুলির সাথে জড়িত হওয়া নয়, তবে আমার ক্যোয়ারির অস্বাভাবিক প্রকৃতি (খুব কমই চলে তবে সময়-সমালোচনা) আমাকে বিশ্বাস করে যে এটি বোধগম্য হবে (যদি সম্ভব হয়) ।

আমি জানার জন্যও আগ্রহী যে কোন সূচী নির্দিষ্ট সময়ে মেমরিতে ক্যাশে হয় তা জানার কোনও উপায় আছে কিনা?

উত্তর:


13

সেখানে একটি DBCC PINTABLEকমান্ড থাকত তবে আমি বিশ্বাস করি যে 6.5 বা সম্ভবত 7.0 এ কাজ করা বন্ধ করে দিয়েছে। বিবৃতি সম্ভবত এখনও পরামর্শ দেবে যে আপনি এটি চেষ্টা করলে এটি কাজ করে, তবে এটি কেবল ফিরে আসে, এটি সত্যই কোনও অনি-অফ।

দুর্ভাগ্যক্রমে কোন সূচকগুলি ক্যাশে রাখা হয়েছে তা নিয়ন্ত্রণের সত্যিই কোনও উপায় নেই - আমি যে টেবিলগুলির জন্য পর্যায়ক্রমে গরম থাকি তার জন্য সবচেয়ে ভাল কাজের কথা আমি জানি যে সেগুলি ম্যানুয়ালি গরম রাখা হয় (যা আপনি ইতিমধ্যে আপনার প্রশ্নে বর্ণনা করেছেন)।

যার জন্য সূচকগুলি স্মৃতিতে রয়েছে, আপনি এ থেকে মোটামুটি ধারণা পেতে পারেন sys.sm_os_buffer_descriptors। আমি এ সম্পর্কে একটি টিপ প্রকাশ করেছি:

http://www.mssqltips.com/sqlservertip/2393/determine-sql-server-memory-use-by-database-and-object/


হুম, সেই স্ক্রিপ্ট অনুসারে, 75 এমবি টেবিলটি 900 এমবি বাফার পুল দখল করছে। এটা কি সাধারণ / সম্ভব?
db2

1
@ ডিবি 2 আপনার কতটি সূচক রয়েছে?
জেএনকে

2
এটি কতটা খণ্ডিত তা ... এটি পৃষ্ঠাগুলি পরিমাপ করছে, ডেটা নয়। আপনার পৃষ্ঠাগুলি তুলনামূলকভাবে খালি থাকতে পারে এবং এটি একটি স্ফীত পরিমাপে অবদান রাখতে পারে।
অ্যারন বারট্র্যান্ড

0

ব্যবহার করার চেষ্টা করুন KEEPPLANএবং KEEPPLAN FIXED ক্যোয়ারী নির্দেশ

KEEPPLAN কোয়েরি অপ্টিমাইজারটিকে একটি ক্যোয়ারির জন্য অনুমান করা রিকম্পাইল থ্রেশহোল্ড শিথিল করতে বাধ্য করে।

KEEPFIXED প্ল্যান পরিসংখ্যানের পরিবর্তনের কারণে ক্যোয়ারী অপ্টিমাইজারটিকে কোয়েরিটি পুনরায় রচনা করতে বাধ্য করে। KEEPFIXED PLAN নির্দিষ্ট করে নিশ্চিত করে যে কেবলমাত্র অন্তর্নিহিত টেবিলগুলির স্কিমা পরিবর্তন করা হয়েছে বা যদি sp_recompile those সারণীর বিপরীতে কার্যকর করা হয় তবেই একটি কোয়েরি পুনরায় সংযুক্ত করা হবে।

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