अजीब बात है, मेरी संग्रहीत प्रक्रिया कुछ इनपुट डेटा के लिए Msg 666 प्राप्त करने के लिए शुरू हुई।
निम्न प्रक्रिया के साथ तालिका में पंक्ति सम्मिलित करने का प्रयास करने पर अंतिम चरण में संग्रहीत प्रक्रिया विफल हो जाती है:
Columns:
A_Id: PK, int
B_Id: PK, FK, int
C_Id: PK, FK, int
D_Id: PK, smallint
यह अनिवार्य रूप से एक तालिका है जो सभी संदर्भित संस्थाओं को एक साथ जोड़ती है।
Indexes:
IX_TableName_D_id - Clustered index on D_id column
PK_TableName - Unique non-clustered index on all columns (A_Id, B_Id, C_Id, D_Id)
दोनों अनुक्रमितों के लिए विखंडन कम है (<25%)। हालांकि PK_TableName विखंडन जल्दी बढ़ता है, क्योंकि मेज पर ऑपरेशन की मात्रा काफी तीव्र है।
तालिका का आकार:
Row count: ~80,000,000 rows
इसलिए, जब मैं D_Id के कुछ के लिए veeery सरल क्वेरी चलाने की कोशिश करता हूं, तो मुझे निम्न संदेश मिलता है:
Msg 666. एक डुप्लिकेट समूह के लिए अधिकतम सिस्टम-जनरेट किया गया अनन्य मान विभाजन ID 422223771074560 के साथ अनुक्रमणिका से अधिक हो गया था। अनुक्रमणिका को ड्रोप करना और पुनः बनाना इसका समाधान हो सकता है; अन्यथा, एक और क्लस्टरिंग कुंजी का उपयोग करें।
क्वेरी का उदाहरण:
INSERT INTO TableName
(A_Id,B_Id,C_Id,D_id)
VALUES (1,1,1,14)
उदाहरण के लिए, जब मैंने D_Id को कुछ मानों के लिए सेट किया है - यह विफल रहता है, उदाहरण के लिए '14'। यदि मैंने D_ID को अन्य मानों (1,2,3, ... 13, 15,16, ...) पर सेट किया है, तो क्वेरी ठीक चलती है।
मुझे संदेह है कि वास्तव में कुछ बुरा है जो अनुक्रमित के साथ चल रहा है ... लेकिन मैं इस के नीचे नहीं जा सकता ... :( यह विफल क्यों होता है?
TRUNCATE TABLE
कि क्या यूनिकफायर रीसेट करता है?