ক্যোয়ারির বেশিরভাগ পরিকল্পনা গত ৪ ঘন্টা পুনরায় তৈরি করা হয়েছে


9

আমার এসকিউএল সার্ভারের ডাটাবেসের কর্মক্ষমতা নিয়ে আমার সমস্যা হয়েছে। আমি এই সরঞ্জামটি sp_BlitzCache পেয়েছি । কমান্ড কার্যকর করার পরে, আমি এই বিবৃতি পেয়েছি:

আপনার গত ২৪ ঘন্টার মধ্যে ৯২.০০% প্ল্যানস তৈরি হয়েছে, এবং hours২.০০% গত চার ঘন্টা তৈরি হয়েছে।

আমি সমস্যাটি সনাক্ত করার সময় (এসকিউএল সার্ভার প্রোফাইলার ব্যবহার করে, আমি স্টেম্টরেকম্পাইল ইভেন্টের ঘটনাগুলি পরীক্ষা করে দেখেছি), আমি প্রায়শই পুনর্নির্মাণ করা কয়েকটি কয়েকটি পূর্ণ-পাঠ্য অনুসন্ধান অনুসন্ধান করতে সক্ষম হয়েছি। তবে পূর্ণ-পাঠ্য অনুসন্ধান অনুসন্ধানগুলি সমস্ত প্রশ্নের প্রায় 5% উপস্থাপন করে।

বাকী plans 87% পরিকল্পনাগুলির বিনোদনের কারণ হতে পারে এমন কোনও পরামর্শ আছে?

আমি এসকিউএল সার্ভার 2012 পেয়েছি (সংস্করণ 11.0.6567.0)।

সম্পাদনা: আমি আমার পারফরম্যান্স কাউন্টার যুক্ত করেছি

+---------------------------+--------------------------------+--------------+
|        object_name        |          counter_name          |  cntr_value  |
+---------------------------+--------------------------------+--------------+
| SQLServer:Buffer Manager  | Background writer pages/sec    |            0 |
| SQLServer:Buffer Manager  | Buffer cache hit ratio         |        28436 |
| SQLServer:Buffer Manager  | Buffer cache hit ratio base    |        28436 |
| SQLServer:Buffer Manager  | Checkpoint pages/sec           |      8259452 |
| SQLServer:Buffer Manager  | Database pages                 |      4434337 |
| SQLServer:Buffer Manager  | Free list stalls/sec           |            9 |
| SQLServer:Buffer Manager  | Integral Controller Slope      |            0 |
| SQLServer:Buffer Manager  | Lazy writes/sec                |         5608 |
| SQLServer:Buffer Manager  | Page life expectancy           |       438901 |
| SQLServer:Buffer Manager  | Page lookups/sec               | 122694703703 |
| SQLServer:Buffer Manager  | Page reads/sec                 |     60994608 |
| SQLServer:Buffer Manager  | Page writes/sec                |    126076564 |
| SQLServer:Buffer Manager  | Readahead pages/sec            |     45305420 |
| SQLServer:Buffer Manager  | Target pages                   |    130990080 |
| SQLServer:Buffer Node     | Database pages                 |      4434337 |
| SQLServer:Buffer Node     | Page life expectancy           |       438901 |
| SQLServer:Buffer Node     | Local node page lookups/sec    |            0 |
| SQLServer:Buffer Node     | Remote node page lookups/sec   |            0 |
| SQLServer:Memory Manager  | External benefit of memory     |            0 |
| SQLServer:Memory Manager  | Connection Memory (KB)         |         3304 |
| SQLServer:Memory Manager  | Database Cache Memory (KB)     |     35474784 |
| SQLServer:Memory Manager  | Free Memory (KB)               |     13229808 |
| SQLServer:Memory Manager  | Granted Workspace Memory (KB)  |            0 |
| SQLServer:Memory Manager  | Lock Memory (KB)               |       455928 |
| SQLServer:Memory Manager  | Lock Blocks Allocated          |      1798154 |
| SQLServer:Memory Manager  | Lock Owner Blocks Allocated    |      3568588 |
| SQLServer:Memory Manager  | Lock Blocks                    |        10562 |
| SQLServer:Memory Manager  | Lock Owner Blocks              |        10617 |
| SQLServer:Memory Manager  | Maximum Workspace Memory (KB)  |     43368000 |
| SQLServer:Memory Manager  | Memory Grants Outstanding      |            0 |
| SQLServer:Memory Manager  | Memory Grants Pending          |            0 |
| SQLServer:Memory Manager  | Optimizer Memory (KB)          |         1400 |
| SQLServer:Memory Manager  | Reserved Server Memory (KB)    |            0 |
| SQLServer:Memory Manager  | SQL Cache Memory (KB)          |       229112 |
| SQLServer:Memory Manager  | Stolen Server Memory (KB)      |      8063232 |
| SQLServer:Memory Manager  | Log Pool Memory (KB)           |         4192 |
| SQLServer:Memory Manager  | Target Server Memory (KB)      |     56934400 |
| SQLServer:Memory Manager  | Total Server Memory (KB)       |     56767824 |
| SQLServer:Memory Node     | Database Node Memory (KB)      |     35474784 |
| SQLServer:Memory Node     | Free Node Memory (KB)          |     13229808 |
| SQLServer:Memory Node     | Foreign Node Memory (KB)       |            0 |
| SQLServer:Memory Node     | Stolen Node Memory (KB)        |      8063208 |
| SQLServer:Memory Node     | Target Node Memory (KB)        |     56934376 |
| SQLServer:Memory Node     | Total Node Memory (KB)         |     56767800 |
+---------------------------+--------------------------------+--------------+

কেউ হয়ত ডিবিসিসি ফ্রিপ্রোসচাচাই চালিয়েছেন? : পি
ড্যানিয়েল বিজার্ক

@ ড্যানিয়েলজর্জ্ক আমি একমাত্র ব্যক্তি যে এই জাতীয় জিনিস করার অনুমতি পেয়েছি তাই আমি মনে করি না যে এটি কারণ। তবে, আমি এটি যাচাই করব।
মার্সিন তোপোলিউস্কি

আপনি কি প্যারামিট্রাইজড ক্যোয়ারী বা সঞ্চিত পদ্ধতি ব্যবহার করছেন? বা আপনার এসকিউএল-এ স্ট্রিং / নম্বর লিটারেল রয়েছে এমন সমস্যা এবং তাই পরিকল্পনাগুলি পুনরায় ব্যবহার করা যাবে না?
জেমস জেড

@ জামেসজেড হ্যাঁ, আমি প্রচুর প্যারাম্যাট্রাইজড কোয়েরি ব্যবহার করছি। আমার পোস্ট, ব্লিটজক্যাচে আমি যে সরঞ্জামটির কথা বলেছি সেটি বলছে যে আমি প্যারামিটার স্নিফিংয়ে সমস্যা পেয়েছি।
মার্সিন তোপোলিউস্কি

1
আপনি কি সূচকগুলি পুনর্নির্মাণ করছেন বা রাত্রে পরিসংখ্যান আপডেট করছেন? সার্ভারে মেমরি চাপ আছে?
এরিক ডার্লিং

উত্তর:


6

পরিকল্পনা তৈরির সময় পরীক্ষা করার জন্য ব্যবহৃত ক্যোয়ারী এটি

WITH x AS (
SELECT SUM(CASE WHEN DATEDIFF(HOUR, deqs.creation_time, SYSDATETIME()) <= 24 THEN 1 ELSE 0 END) AS [plans_24],
       SUM(CASE WHEN DATEDIFF(HOUR, deqs.creation_time, SYSDATETIME()) <= 4 THEN 1 ELSE 0 END) AS [plans_4],
       SUM(CASE WHEN DATEDIFF(HOUR, deqs.creation_time, SYSDATETIME()) <= 1 THEN 1 ELSE 0 END) AS [plans_1],
       COUNT(deqs.creation_time) AS [total_plans]
FROM sys.dm_exec_query_stats AS deqs
)
SELECT CONVERT(DECIMAL(3,2), NULLIF(x.plans_24, 0) / (1. * NULLIF(x.total_plans, 0))) * 100 AS [percent_24],
       CONVERT(DECIMAL(3,2), NULLIF(x.plans_4 , 0) / (1. * NULLIF(x.total_plans, 0))) * 100 AS [percent_4],
       CONVERT(DECIMAL(3,2), NULLIF(x.plans_1 , 0) / (1. * NULLIF(x.total_plans, 0))) * 100 AS [percent_1],
       @@SPID AS SPID
INTO #plan_creation
FROM x
OPTION (RECOMPILE) ;

আপনার আরও গবেষণা কোথায় শুরু করতে হবে তা নিয়ে এসপি কিছু সংকেতও সরবরাহ করে

যদি এই শতাংশগুলি বেশি থাকে তবে এটি মেমরির চাপ বা পরিকল্পনার ক্যাশে অস্থিরতার লক্ষণ হতে পারে

উপরের ক্লু ছাড়া অন্য, আপনার সার্ভারটি আবার চালু হয়েছে কিনা তা পরীক্ষা করে দেখুন।

যদি আপনার সার্ভারটি পুনরায় চালু না করা হয়, তবে নীচে আমি গ্রহণ করব এমন পদ্ধতি

  • আপনার মুখোমুখি মেমরি চাপ আছে কিনা তা পরীক্ষা করে দেখুন

প্রথমে দেখুন, যদি আপনার মেমরি সেটিংস অনুকূলভাবে কনফিগার করা থাকে if তাই, আপনি মেমরির চাপের মুখোমুখি হয়ে আছেন কিনা তা দেখতে আপনি নীচের কাউন্টারগুলি ব্যবহার করতে পারেন

মেমোরি: উপলভ্য এমবি
এসকিউএল বাফার: ফ্রি পেজ
এসকিউএল বাফার: পেজ লাইফ
এসকিউএল বাফার: অলস রাইটস

যদি আপনি মেমরির চাপের মুখোমুখি হন, তবে আপনি যে প্রশ্নগুলি বেশি মেমরি ব্যবহার করছেন তা দেখতে এবং টিউন করতে পারেন বা আরও মেমরি যুক্ত করার চেষ্টা করতে পারেন

আপনার কাছে পুনরায় সংশ্লেষণের কারণ হয়ে দৌড়াতে পারে them

  • কোনও সারণীতে পরিবর্তন হয়েছে বা কোয়েরি দ্বারা রেফারেন্স হয়েছে (ALTER TABLE and ALTER VIEW)।

  • একক পদ্ধতিতে পরিবর্তন করা হয়েছে, যা ক্যাশে (বিকল্প পদ্ধতি) থেকে সেই পদ্ধতির সমস্ত পরিকল্পনা বাদ দেয়।

  • এক্সিকিউশন প্ল্যান দ্বারা ব্যবহৃত যে কোনও সূচীতে পরিবর্তন

  • সম্পাদনা পরিকল্পনার দ্বারা ব্যবহৃত পরিসংখ্যান সম্পর্কিত আপডেটগুলি বিবৃতি থেকে স্পষ্টভাবে উত্পন্ন, যেমন আপডেটের পরিসংখ্যান, বা স্বয়ংক্রিয়ভাবে উত্পন্ন।

  • এক্সিকিউশন পরিকল্পনা দ্বারা ব্যবহৃত একটি সূচক বাদ দেওয়া ping

প্ল্যান ক্যাশে সম্পর্কিত আরও তথ্যের জন্য আপনি এই সাদা কাগজটিও দেখতে পারেন

https://technet.microsoft.com/en-us/library/ee343986(v=sql.100).aspx


আমি আমার পারফরম্যান্স কাউন্টারগুলি যুক্ত করেছি, আপনি কি আমাকে এই মানগুলি ব্যাখ্যা করতে সহায়তা করতে পারেন?
মার্সিন তোপোলিউস্কি

আপনি এখানে মেমরি সম্পর্কিত বিশদ সম্পর্কিত কাউন্টারগুলি সন্ধান করতে পারেন: ব্লগস.এমএসএনএন.মাইক্রোসফট.
2007

@ গেইমেশ্বর আপনি বলেছেন "আপনার হয়ত এমন প্রশ্নাবলির উদ্রেক ঘটেছিল যা পুনঃসংশোধনের কারণ হয়ে থাকে ... যেমন সূচীতে পরিবর্তন, পরিসংখ্যানের আপডেট"। আমি যদি প্রতি রাতে খণ্ড + আপডেটের পরিসংখ্যানের ভিত্তিতে সূচকগুলি পুনঃনির্দেশ / পুনর্নির্মাণ করি তবে এর অর্থ কি আমার পরিকল্পনাগুলি প্রতিদিন (বা প্রায় সমস্ত) পুনরায় তৈরি করা হবে? এটা কি একটা সমস্যা?
ড্যানিয়েল প্যাকেট-হার্ভে

2

@ গেমিস্বর যা বলেছিলেন তা যুক্ত করতে ক্যাশে থেকে প্রাপ্ত নয় এমন পরিকল্পনাগুলির বিশদ দেখতে আপনি এই ক্যোয়ারীটি চালাতে পারেন।

;with
    xmlnamespaces (N'http://schemas.microsoft.com/sqlserver/2004/07/showplan' as DYN)
select
    db_name(st.dbid) as DBName
    , object_schema_name(st.objectid, st.dbid) as SchemaName
    , object_name(st.objectid, st.dbid) as ObjectName
    , ecp.objtype
    , st.text
    , qp.query_plan.value('(/DYN:ShowPlanXML/DYN:BatchSequence/DYN:Batch/DYN:Statements/DYN:StmtSimple/@RetrievedFromCache)[1]', 'varchar(100)') as RetrievedFromCache
    , qp.query_plan
into #temp
from sys.dm_exec_cached_plans ecp
    outer apply sys.dm_exec_query_plan(ecp.plan_handle) qp
    outer apply sys.dm_exec_sql_text(ecp.plan_handle) st

select
    *
from #temp t
where t.RetrievedFromCache is null
    and t.DBName is not null
order by t.DBName, t.SchemaName, t.ObjectName;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.