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

SQL सर्वर डेटाबेस में पहचान वृद्धि बढ़ रही है

SQL सर्वर 2012 के बाद से प्रदर्शन में सुधार के कारण आप इस व्यवहार का सामना कर रहे हैं।

यह अब डिफ़ॉल्ट रूप से IDENTITY . आवंटित करते समय 1,000 के कैश आकार का उपयोग करता है int . के लिए मान कॉलम और सेवा को पुनरारंभ करने से अप्रयुक्त मान "खो" सकते हैं (कैश आकार 10,000 है bigint के लिए /numeric )

दस्तावेज़ीकरण में इसका उल्लेख किया गया है

<ब्लॉकक्वॉट>

SQL सर्वर प्रदर्शन कारणों से पहचान मानों को कैश कर सकता है और कुछ असाइन किए गए मान डेटाबेस विफलता या सर्वर पुनरारंभ होने के दौरान खो सकते हैं। इसके परिणामस्वरूप डालने पर पहचान मूल्य में अंतराल हो सकता है। यदि अंतराल स्वीकार्य नहीं हैं तो एप्लिकेशन को प्रमुख मान उत्पन्न करने के लिए अपने स्वयं के तंत्र का उपयोग करना चाहिए। NOCACHE . के साथ अनुक्रम जनरेटर का उपयोग करना विकल्प अंतराल को उन लेन-देन तक सीमित कर सकता है जो कभी प्रतिबद्ध नहीं हैं।

आपके द्वारा दिखाए गए डेटा से ऐसा लगता है कि यह 22 दिसंबर के लिए डेटा प्रविष्टि के बाद हुआ, फिर जब SQL सर्वर ने फिर से शुरू किया तो मान 1206306 - 1207305 आरक्षित कर दिया। . 24 - 25 दिसंबर के लिए डेटा प्रविष्टि के बाद एक और पुनरारंभ किया गया और SQL सर्वर ने अगली श्रेणी 1207306 - 1208305 आरक्षित कर दी 28 तारीख की प्रविष्टियों में दिखाई दे रहा है।

जब तक आप असामान्य आवृत्ति के साथ सेवा को फिर से शुरू नहीं कर रहे हैं, तब तक किसी भी "खोए हुए" मूल्यों से डेटाटाइप द्वारा अनुमत मूल्यों की सीमा में कोई महत्वपूर्ण सेंध लगाने की संभावना नहीं है, इसलिए सबसे अच्छी नीति इसके बारे में चिंता करने की नहीं है।

यदि यह किसी कारण से आपके लिए एक वास्तविक समस्या है तो कुछ संभावित समाधान हैं...

  1. आप एक SEQUENCE का उपयोग कर सकते हैं एक पहचान कॉलम के बजाय और उदाहरण के लिए एक छोटे कैश आकार को परिभाषित करें और NEXT VALUE FOR का उपयोग करें एक कॉलम में default.
  2. या ट्रेस फ़्लैग 272 लागू करें जो IDENTITY बनाता है 2008 R2 तक के संस्करणों में आवंटन लॉग किया गया। यह विश्व स्तर पर सभी डेटाबेस पर लागू होता है।
  3. या, हाल के संस्करणों के लिए, ALTER DATABASE SCOPED CONFIGURATION SET IDENTITY_CACHE = OFF निष्पादित करें विशिष्ट डेटाबेस के लिए पहचान कैशिंग अक्षम करने के लिए।

आपको पता होना चाहिए कि इनमें से कोई भी समाधान अंतराल नहीं होने का आश्वासन देता है। इसकी कभी भी IDENTITY द्वारा गारंटी नहीं दी गई है क्योंकि यह केवल तालिका में प्रविष्टियों को क्रमबद्ध करके ही संभव होगा। अगर आपको एक गैपलेस कॉलम की जरूरत है, तो आपको IDENTITY . के अलावा किसी अन्य समाधान का उपयोग करने की आवश्यकता होगी या SEQUENCE



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर - SQL सर्वर / T-SQL ट्यूटोरियल भाग 38 में GUI का उपयोग करके कॉलम कैसे बदलें या स्क्रिप्ट बदलें

  2. SQL सर्वर (T-SQL) में वर्तमान लॉगिन आईडी प्राप्त करें

  3. हम एसएसएमएस में एन्क्रिप्टेड संग्रहीत प्रक्रिया के शरीर को कैसे देख सकते हैं?

  4. टी-एसक्यूएल का उपयोग करके आरपीसी आउट को कैसे सक्षम करें

  5. SQL सर्वर पुनर्निर्माण अनुक्रमणिका क्वेरी