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

त्वरित फ़ाइल प्रारंभ:सेटअप के दौरान प्रभाव

हाल ही में, Erin Stellato (@erinstellato) ने प्रदर्शन प्रभाव के बारे में ब्लॉग किया था, इंस्टेंट फ़ाइल इनिशियलाइज़ेशन (IFI) डेटाबेस बनाते या पुनर्स्थापित करते समय हो सकता है। वह बताती हैं कि SQL सर्वर 2016 सेटअप अब आपको स्थापना के दौरान SQL सर्वर सेवा के लिए उपयुक्त अधिकार प्रदान करने की क्षमता प्रदान करता है (हमने SQL सर्वर 2016 के नवीनतम बिल्ड के CTP 3.0 अनुभाग में भी इस बारे में बात की थी):

अब आप SQL सर्वर सेटअप के दौरान त्वरित फ़ाइल आरंभीकरण सक्षम कर सकते हैं

कुंजी एक नया विकल्प है (जिसे आप कॉन्फ़िगरेशन फ़ाइल में भी निर्दिष्ट कर सकते हैं):

SQLSVCINSTANTFILEINIT="True|False"

यह अच्छा है कि आप बाद में डेटाबेस बनाने या पुनर्स्थापित करने में लगने वाले समय को वास्तव में कम कर सकते हैं, बिना gpedit में जाने, अधिकारों को सही ढंग से असाइन करने और सेवा को पुनरारंभ करने के लिए याद किए बिना। लेकिन मेरे लिए एक बहुत बड़ा लाभ IFI का जल्दी लाभ उठाते हुए, सेटअप के दौरान बड़ी tempdb फ़ाइलों को कॉन्फ़िगर करने की क्षमता है।

अब, सेटअप के दौरान कुछ सीमाएं हैं; उदाहरण के लिए, tempdb फ़ाइलों की संख्या 8 (या कोर की संख्या, जो भी कम हो) तक सीमित है, और प्रत्येक फ़ाइल का आकार केवल अधिकतम 1,024 एमबी तक ही पहुंच सकता है। इन सीमाओं को UI में लागू किया गया है, और मैंने सोचा कि मैं एक अनअटेंडेड इंस्टॉलेशन के लिए कॉन्फ़िगरेशन फ़ाइल में उच्च आकार निर्दिष्ट करके उनके आसपास जाने में सक्षम हो सकता हूं, लेकिन यह भी काम नहीं किया। (लॉग ने कहा:"TempDB फ़ाइल आकार के लिए मान 8192 1024 एमबी से अधिक है और स्थापना समय पर प्रभाव पड़ सकता है। आप इसे छोटे आकार में सेट कर सकते हैं और स्थापना के बाद इसे बदल सकते हैं।") व्यक्तिगत रूप से, मुझे लगता है कि इस दिन और आयु, गति और भंडारण के आकार के साथ हम प्राप्त कर सकते हैं, डेटा फ़ाइल आकार पर 1 जीबी कैप कृत्रिम रूप से कम है। इसलिए मैंने एक कनेक्ट सुझाव दायर किया:

  • कनेक्ट #2457759 :tempdb डेटा फ़ाइलें 1024 एमबी तक सीमित नहीं होनी चाहिए

और फिर यह बताया गया कि ब्रेंट ओज़र (@ ब्रेंटो) ने पहले सीटीपी चक्र में एक समान आइटम दायर किया था, जब सीमा वास्तव में 1 जीबी के बजाय 256 एमबी के रूप में लागू की गई थी:

  • कनेक्ट #1841076 :TempDB सेटअप प्रारंभिक आकार बहुत कम

मेरे पास कोई राक्षस मशीन नहीं है जो 64 x 1 जीबी फाइलों का समर्थन कर सके, और यह एक यथार्थवादी परीक्षण भी नहीं होगा, इसलिए मैंने प्रत्येक 1 जीबी की 8 tempdb डेटा फ़ाइलों पर IFI के प्रभाव का परीक्षण करने का संकल्प लिया। मैं पुराने स्कूल की तरह हूं, इसलिए मैंने चार अलग-अलग .ini फाइलें बनाई हैं, और मैंने उन पंक्तियों को हाइलाइट किया है जिन्हें मैं प्रत्येक परीक्षण के लिए बदलूंगा (मैं IFI का उपयोग करके 4 x 8 एमबी डेटा फ़ाइलों के साथ एक न्यूनतम इंस्टाल करना चाहता था और नहीं, और फिर इसकी तुलना 8 x 1,024 एमबी फाइलों से करें)। चूंकि मैं इन लूपों को कई बार चला रहा था, इसलिए IFI सक्षम था या नहीं, इस पर निर्भर करते हुए विभिन्न उदाहरण नामों का उपयोग करना महत्वपूर्ण था, क्योंकि एक बार जब आप किसी सेवा खाते का अधिकार देते हैं, तो यह केवल इंस्टेंस को हटाकर नहीं लिया जाता है (और मैं उन खातों को स्वतंत्र रूप से सेट कर सकता था, लेकिन मैं इन परीक्षणों को पुन:पेश करना आसान बनाना चाहता था)।

;SQL सर्वर 2016 RC0 कॉन्फ़िगरेशन फ़ाइल
[विकल्प]
ACTION="इंस्टॉल"
ENU="True"
QUIET="True"
QUIETSIMPLE="False"
UpdateEnabled="False"
ERRORREPORTING="False"
USEMICROSOFTUPDATE="False"
FEATURES=SQLENGINE
HELP="False"
INDICATEPROGRESS=" False"
INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server"
INSTALLSHAREDWOWDIR="C:\Program Files (x86)\Microsoft SQL Server"
INSTANCENAME="ABTESTIFI_ON"
INSTANCEID="ABTESTIFI_ON"
SQLTELSVCSTARTUPTYPE="अक्षम"
INSTANCEDIR="C:\Program Files\Microsoft SQL Server"
AGTSVCACCOUNT="NT Authority\System"
AGTSVCSTARTUPTYPE ="मैनुअल"
SQLSVCSTARTUPTYPE="मैनुअल"
SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS"
SQLSVCACCOUNT="NT Service\MSSQL$ABTESTIFI_ON"
;IFI के लिए सही =ON, OFF के लिए गलत :
SQLSVCINSTANTFILEINIT="False"
SQLSYSADMINACCOUNTS="NT Authority\System"
SQLTEMPDBFILECOUNT="8"
;1024 कुल 8 जीबी के लिए, कुल 64 एमबी के लिए 8:
एसक्यूएलटीईएमपीडी BFILESIZE="1024"
SQLTEMPDBFILEGROWTH="64"
SQLTEMPDBLOGFILESIZE="8"
SQLTEMPDBLOGFILEGROWTH="64"
BROWSERSVCSTARTUPTYPE="मैनुअल"

और यहां वह बैच फ़ाइल है जिसका मैंने उपयोग किया (कॉन्फ़िगरेशन फ़ाइलों के समान फ़ोल्डर में रखा गया), जिसने तीन बार प्रत्येक संयोजन का उपयोग करके इंस्टेंस को स्थापित और अनइंस्टॉल किया, और सेटअप समय को टेक्स्ट फ़ाइल में लॉग किया - अनइंस्टॉल और क्लीनअप को अनदेखा कर दिया। इको बिगिनिंग टेस्ट…
@echo off 2>nul
setlocal enableelayedexpansion
set outputfile=time.txt
echo.> %outputfile%
rem अगर आपके पास केवल 4 कोर हैं तो आठ और/या सोलह निकालें!
%%e IN (बेसलाइन चार आठ सोलह) के लिए (
%%x IN (IFI_ON) के लिए IFI_OFF) DO (
FOR /L %%A IN (1,1,3) DO (
इको INSERT #x VALUES('%%e', '%%x', '!TIME! ',>> %outputfile%
D:\setup.exe /Q /IACCEPTSQLSERVERLICENSETERMS /ConfigurationFile=%%e_%%x.ini
echo '!TIME!' ^)>> %outputfile%
D:\setup.exe /Q /ACTION=UNINSTALL /INSTANCENAME=ABTEST%%x /FEATURES=SQL
rem del /Q /S "C:\Program Files\Microsoft SQL Server\MSSQL13.ABTEST %%x\*.*"
रेम rd /Q /S "C:\Program Files\Microsoft SQL Server\MSSQL13.ABTEST%%x\"
)
)
)
@echo on
echo …परीक्षण पूर्ण।

कुछ नोट्स:

  • आपको D:\setup.exe . से दो पंक्तियों को बदलना पड़ सकता है सेटअप निर्देशिका के पथ पर।
  • इसे चलाने से पहले आपको अपने सिस्टम को पुनरारंभ करना पड़ सकता है।
  • आप बैच फ़ाइल को एक उन्नत कमांड प्रॉम्प्ट से चलाना चाहेंगे ताकि UAC आपको प्रत्येक पुनरावृत्ति पर बाधित न करे।

मैंने तीन अलग-अलग प्रणालियों पर परीक्षण चलाए:

  • एक Windows 10 VM जिसमें 4 कोर और SSD स्टोरेज है
    4 x 8MB का आधारभूत परीक्षण और फिर 4 x 1,024 एमबी
  • 8 कोर और PCIe स्टोरेज वाला Windows 10 VM
    4 x 8MB, 4 x 1,024 एमबी, 8 x 1,024 एमबी का आधारभूत परीक्षण
  • 16 कोर के साथ एक Windows 2012 R2 VM और 8 10K SAS ड्राइव के दोहरे चैनल RAID 10 सरणी
    4 x 8MB, 4 x 1,024 एमबी, 8 x 1,024 एमबी, और 16 x 1,024 एमबी का आधारभूत परीक्षण

आउटपुट फाइलों ने इन्सर्ट स्टेटमेंट्स का एक गुच्छा उत्पन्न किया जिसे मैं यहाँ पेस्ट कर सकता था:

CREATE TABLE #x
(
  [server] varchar(32),
  [test]   varchar(32),
  [start]  time(2),
  [end]    time(2)
);
 
-- inserts pasted here
 
SELECT [server],[test],AVG(DATEDIFF(SECOND,[start],[end])*1.0)
FROM #x
GROUP BY [server],[test];

औसत और गोल (विस्तार करने के लिए क्लिक करें):

अनुमानतः, धीमी ड्राइव पर बड़ी फ़ाइलों के साथ IFI महत्वपूर्ण हो जाता है

पूरे बोर्ड में सेटअप में एक मिनट से थोड़ा अधिक समय लगता है (बिना प्रबंधन उपकरण के सेटअप चलाना कितना अच्छा है)। एकमात्र विचलन, वास्तव में, तब था जब यांत्रिक ड्राइव पर फ़ाइल का आकार बड़ा होना शुरू हो गया था और तत्काल फ़ाइल आरंभीकरण अक्षम हो गया था। मैं इससे चौंकने का नाटक नहीं कर सकता।

निष्कर्ष

यदि आप SSD या PCIe पर हैं, तो तत्काल फ़ाइल आरंभीकरण चीजों को बदतर नहीं बना सकता है, लेकिन सेटअप के दौरान कोई स्पष्ट लाभ नहीं होता है, जब तक कि tempdb डेटा फ़ाइलों के लिए पुरातन फ़ाइल आकार की सीमाएँ बरकरार रहती हैं। वर्तमान नियमों के साथ इस प्रभाव का परीक्षण करना संभव नहीं लगता (1 जीबी x उपलब्ध कोर की संख्या)। यदि आप धीमी यांत्रिक ड्राइव पर हैं, हालांकि, केवल 8 जीबी या 16 जीबी डेटा शुरू करने पर भी ध्यान देने योग्य अंतर है - जब डिस्क हेड को स्थानांतरित करना होता है तो शून्य करना महंगा होता है। उस ने कहा, क्या सेटअप में 75 सेकंड या 2 मिनट लगते हैं, चीजों की भव्य योजना में बहुत महत्वहीन है (जब तक कि आप सैकड़ों सर्वर स्थापित नहीं कर रहे हैं, लेकिन किसी कारण से इसे स्वचालित नहीं कर रहे हैं), इसलिए मुझे लगता है कि यहां बड़ा लाभ सुविधा है - नहीं स्थापना सफल होने के कुछ समय बाद आवश्यक वॉल्यूम अधिकारों को सेवा खाते को अनुदान देना याद रखना होगा। यदि आप इसके बारे में सोचते हैं, तो यह नया कॉन्फ़िगरेशन विकल्प वास्तविक स्थापना के दौरान सहेजे गए किसी भी समय के बाहर, बड़ी संख्या में सर्वरों के स्वचालित इंस्टॉल में वास्तव में बेहतर भुगतान कर सकता है।

  • कॉन्फ़िगरेशन फ़ाइलें और बैच फ़ाइल डाउनलोड करें

(मेरा अगला परीक्षण मौजूदा tempdb फ़ाइलों को 1,024 एमबी इंस्टॉलेशन के बाद से बहुत बड़े आकार में विस्तारित करने में लगने वाले समय पर एक नज़र डालेगा। ।)


  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. हर कीमत पर बचने के लिए 5 बहुत ही सामान्य SQL क्वेरी डिज़ाइन गलतियाँ

  3. Microsoft Power BI में डेटा कैसे लोड और प्रबंधित करें?

  4. लिंक किए गए सर्वर के साथ छद्म कॉलम का उपयोग करना

  5. कमांड लाइन के साथ SQL डेटाबेस माइग्रेशन