Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर SHOWPLAN_ALL

SQL सर्वर में, आप SET SHOWPLAN_ALL . का उपयोग कर सकते हैं टी-एसक्यूएल स्टेटमेंट को कैसे निष्पादित किया जाता है, साथ ही साथ स्टेटमेंट के लिए संसाधन आवश्यकताओं के अनुमान के बारे में विस्तृत जानकारी देने के लिए स्टेटमेंट।

SHOWPLAN_ALL पंक्तियों के एक सेट के रूप में जानकारी देता है जो एक पदानुक्रमित पेड़ बनाता है जो SQL सर्वर क्वेरी प्रोसेसर द्वारा उठाए गए चरणों का प्रतिनिधित्व करता है क्योंकि यह प्रत्येक कथन को निष्पादित करता है। यह SHOWPLAN_TEXT . के समान है , सिवाय इसके कि SHOWPLAN_ALL अधिक विस्तृत जानकारी देता है (और इसका उपयोग उन अनुप्रयोगों के साथ किया जाना है जो इसके आउटपुट को संभाल सकते हैं)।

आप SHOWPLAN_ALL सेट कर सकते हैं या तो ON या OFF .

जब SHOWPLAN_ALL ON है , बाद के सभी टी-एसक्यूएल स्टेटमेंट निष्पादित नहीं होते हैं। इसके बजाय SQL सर्वर कथन के लिए निष्पादन जानकारी (इसे निष्पादित किए बिना) देता है।

यह नोट करना महत्वपूर्ण है कि SHOWPLAN_ALL अनुमान प्रदान करता है संसाधन आवश्यकताओं की, और वास्तविक संसाधन आवश्यकताएं भिन्न हो सकती हैं जब कथन वास्तव में निष्पादित होता है।

उदाहरण

प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।

SET SHOWPLAN_ALL ON;
GO

SELECT * FROM Cats;
GO

ध्यान दें कि SET SHOWPLAN_ALL संग्रहीत प्रक्रिया के अंदर निर्दिष्ट नहीं किया जा सकता है, और यह बैच में एकमात्र कथन होना चाहिए।

यहां बताया गया है कि Azure डेटा स्टूडियो में परिणाम कैसा दिखता है:

और यहाँ यह वर्टिकल आउटपुट का उपयोग करते समय mssql-cli (कमांड लाइन इंटरफ़ेस) में कैसा दिखता है:

Commands completed successfully.
-[ RECORD 1 ]-------------------------
StmtText           | 
SELECT * FROM Cats;
StmtId             | 1
NodeId             | 1
Parent             | 0
PhysicalOp         | NULL
LogicalOp          | NULL
Argument           | 1
DefinedValues      | NULL
EstimateRows       | 3
EstimateIO         | NULL
EstimateCPU        | NULL
AvgRowSize         | NULL
TotalSubtreeCost   | 0.0032853
OutputList         | NULL
Warnings           | NULL
Type               | SELECT
Parallel           | 0
EstimateExecutions | NULL
-[ RECORD 2 ]-------------------------
StmtText           |   |--Clustered Index Scan(OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F]))
StmtId             | 1
NodeId             | 2
Parent             | 1
PhysicalOp         | Clustered Index Scan
LogicalOp          | Clustered Index Scan
Argument           | OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F])
DefinedValues      | [Test].[dbo].[Cats].[CatId], [Test].[dbo].[Cats].[CatName]
EstimateRows       | 3
EstimateIO         | 0.003125
EstimateCPU        | 0.0001603
AvgRowSize         | 142
TotalSubtreeCost   | 0.0032853
OutputList         | [Test].[dbo].[Cats].[CatId], [Test].[dbo].[Cats].[CatName]
Warnings           | NULL
Type               | PLAN_ROW
Parallel           | 0
EstimateExecutions | 1
(2 rows affected)
Commands completed successfully.

बहुत सारे कॉलम हैं, इसलिए मैंने यहां वर्टिकल आउटपुट का इस्तेमाल किया ताकि इसे पढ़ना आसान हो जाए।

यदि मेरी क्वेरी अधिक जटिल होती, तो और पंक्तियाँ लौटा दी जातीं।

यहां एक (थोड़ा) अधिक जटिल क्वेरी का उदाहरण दिया गया है।

SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;

परिणाम:

इसे कैसे बंद करें

आप SET SHOWPLAN_ALL OFF सेट करके इसे बंद कर सकते हैं ।

एक बार ऐसा करने के बाद, बाद के कथन सामान्य रूप से निष्पादित होंगे।

SET SHOWPLAN_ALL OFF;
GO

SELECT * FROM Cats;
GO

परिणाम:

Commands completed successfully.
+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 1       | Meow      |
| 2       | Fluffy    |
| 3       | Scratch   |
+---------+-----------+
(3 rows affected)
Commands completed successfully.

बहिष्कृत या नहीं?

इस पुराने MSDN लेख के अनुसार, SET SHOWPLAN_ALL भविष्य के शोप्लान संस्करणों में बहिष्करण के लिए शेड्यूल किया गया है, और यह अनुशंसा की जाती है कि आप SET SHOWPLAN_XML का उपयोग करें इसके बजाय।

हालाँकि, वह MSDN लेख SQL Server 2008 R2 के लिए है, और जैसा कि मैंने इसे लिखा है, ऐसा लगता है कि SQL Server 2019 में पदावनत नहीं किया गया है। वास्तव में, वर्तमान दस्तावेज़ीकरण में बहिष्करण का कोई उल्लेख नहीं है, और यह शामिल नहीं है। जब मैं SQL सर्वर में बहिष्कृत वस्तुओं की सूची चलाता हूं।

किसी भी तरह से, भविष्य में रिलीज़ में इसका उपयोग करने से पहले शायद इसे ध्यान में रखना होगा।

ग्राफ़िकल एक्ज़ीक्यूशन प्लान

यदि आप SSMS या Azure डेटा स्टूडियो जैसे ग्राफ़िकल टूल का उपयोग कर रहे हैं, तो आपके पास वर्तमान क्वेरी के लिए अनुमानित ग्राफ़िकल क्वेरी निष्पादन योजना देखने का विकल्प हो सकता है।

  • SSMS में आप Ctrl + L . का उपयोग कर सकते हैं यह करने के लिए। या आप अनुमानित निष्पादन योजना प्रदर्शित करें . क्लिक कर सकते हैं आइकन, या क्वेरी विंडो में राइट-क्लिक करें और अनुमानित निष्पादन योजना प्रदर्शित करें चुनें ।
  • Azure Data Studio में, आप व्याख्या करें . पर क्लिक कर सकते हैं क्वेरी विंडो के ऊपर बटन।

आप SET SHOWPLAN_XML ON . का भी उपयोग कर सकते हैं इसे सक्षम करने के लिए, और SET SHOWPLAN_XML OFF इसे निष्क्रिय करने के लिए।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल सर्वर समूह से पहली पंक्ति का चयन करें

  2. SQL सर्वर (T-SQL) में वर्तमान भाषा कैसे सेट करें

  3. आंतरायिक ODBC कनेक्शन विफलता

  4. टीएसक्यूएल ईमेल सत्यापन (रेगेक्स के बिना)

  5. SQL सर्वर में "सर्वर डेटा एक्सेस के लिए कॉन्फ़िगर नहीं है" को कैसे ठीक करें