আপডেট: এটি অবশ্যই একটি বাগ। সম্পূর্ণ বিশদের জন্য এই সংযুক্ত আইটেমটি দেখুন ।
স্প_ব্লিটজ ক্যাচে কিছু পরিবর্তন পরীক্ষা করার সময় (সম্পূর্ণ প্রকাশ, আমি অন্যতম লেখক), আমি আমাদের কোডটিতে একটি বাগ বলে ভেবেছিলাম তা পেরিয়ে এসেছি।
এক পর্যায়ে, ক্যোয়ারি ব্যয় পেতে আমরা কোয়েরি প্ল্যান হ্যাশের সাথে মিল করছি। আমরা এটির মতোই এটি করি:
statement.value('sum(/p:StmtSimple[xs:hexBinary(substring(@QueryHash, 3)) =
xs:hexBinary(sql:column("b.QueryHash"))]/@StatementSubTreeCost)', 'float')
এটি যতদূর আমি দেখেছি, কাজ করেছে। যাইহোক, একটি অদ্ভুত ক্ষেত্রে, এক্সএমএলটিতে সাবস্ট্রিং একটি NULL
মান ফেলছিল , এবং পরিকল্পনাটি উচ্চতর হওয়া সত্ত্বেও 0 এর ব্যয় প্রদর্শন করছে।
কার্যকর করার পরিকল্পনার খনন (সম্পূর্ণ প্রকাশ, আমি যে সংস্থার পেস্ট দ্য প্ল্যানটি হোস্ট করি তার জন্য কাজ করি), আমি লক্ষ্য করেছি যে একটি সমস্যার হ্যাশের ক্যোরি প্ল্যান হ্যাশটি 17 অক্ষর দীর্ঘ, আর বাকী 18 টি রয়েছে Here এখানে উদাহরণ রয়েছে:
QueryPlanHash = "0x4410B0CA640CDA89" QueryPlanHash = "0x2262FEA4CE645569" ক্যোরিপ্ল্যানহ্যাশ = "0xED4F225CC0E97E5" - সমস্যা! QueryPlanHash = "0xBF878EEE6DB955EA" QueryPlanHash = "0x263B53BC8C14A452" QueryPlanHash = "0x89F5F146CF4B476F" QueryPlanHash = "0xEF47EA40805C8961" QueryPlanHash = "0xB7BE27D6E43677A5" QueryPlanHash = "0x815C54EC43A6A6E9"
ক্যোয়ারি প্ল্যান হ্যাশকে একটি হিসাবে তালিকাভুক্ত করা হয়েছে BINARY 8
- সম্ভবত এটি সর্বদা একই দৈর্ঘ্য হওয়া উচিত তবে আমার মতো লোক বাইনারি মান সম্পর্কে কী জানে?
খানিকটা এক্সকিউরির সাথে খেলে আমি দেখতে পেলাম যে দ্বিতীয়টি অবস্থানে শুরু করার জন্য স্ট্রিংগুলি পরিবর্তন করে এটি একটি বৈধ (ভুল হলেও) হ্যাশ মান নিয়ে আসবে।
WITH XMLNAMESPACES('http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS p)
SELECT
QueryPlanCost = statement.value('sum(/p:StmtSimple/@StatementSubTreeCost)', 'float'),
**q.n.value('substring(@QueryPlanHash, 2)', 'BINARY(8)')**
FROM #statements s
CROSS APPLY s.statement.nodes('/p:StmtSimple') AS q(n)
OPTION(RECOMPILE);
WITH XMLNAMESPACES('http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS p)
SELECT
QueryPlanCost = statement.value('sum(/p:StmtSimple/@StatementSubTreeCost)', 'float'),
**q.n.value('substring(@QueryPlanHash, 3)', 'BINARY(8)')**
FROM #statements s
CROSS APPLY s.statement.nodes('/p:StmtSimple') AS q(n)
OPTION(RECOMPILE);
আমি এসকিউএল সার্ভার 2016, এসপি 1 (13.0.4001) চালাচ্ছি।
এর আগে কেউ কি এর মধ্যে দৌড়েছে?
17 টি অক্ষর একটি BINARY 8
মান জন্য একটি বৈধ দৈর্ঘ্য ?
এটি কি কোনও বাগের মতো দেখাচ্ছে যা একটি কানেক্ট আইটেম পাবে?