2008 की तुलना में SQL सर्वर 2012 धीमा


15

मैंने एक बड़े सर्वर और पुराने सर्वर (Windows 2008 / SQL Server 2008/16 GB RAM / 2 x 2.5 GHz क्वाड कोर / SAS डिस्क) से एक नए, बहुत बेहतर सर्वर (Windows 2008 R2 / SQL सर्वर 2012 SP1 /) पर माइग्रेट किया 64 जीबी रैम / 2 x 2.1 गीगाहर्ट्ज़ 16 कोर प्रोसेसर / एसएसडी डिस्क)।

मैंने पुराने सर्वर पर डेटाबेस फ़ाइलों को अलग किया, उन्हें नए सर्वर पर कॉपी और संलग्न किया। सब कुछ बहुत अच्छा हुआ।

उसके बाद, मैंने संगतता स्तर को 110 में बदल दिया, अपडेट किए गए आंकड़े, अनुक्रमित का पुनर्निर्माण किया।

मेरी भारी निराशा के लिए, मैंने देखा कि अधिकांश SQL क्वेरी पुराने SQL 2008 सर्वर की तुलना में नए SQL 2012 सर्वर पर बहुत धीमी (2-3-4 गुना धीमी) हैं।

उदाहरण के लिए, लगभग 700k रिकॉर्ड वाली एक मेज पर, पुराने सर्वर पर सूचकांक पर एक क्वेरी लगभग 100ms पर ले गई। नए सर्वर पर, एक ही क्वेरी लगभग 350 एमएस लेता है।

सभी प्रश्नों के लिए एक ही होता है।

मैं यहां कुछ मदद की सराहना करूंगा। मुझे पता है कि क्या जाँच / सत्यापन करना है। क्योंकि मुझे यह विश्वास करना बहुत कठिन है कि नए SQL सर्वर के साथ बेहतर सर्वर पर, प्रदर्शन बदतर है।

अधिक जानकारी:

मेमोरी अधिकतम पर सेट है।

मेरे पास यह तालिका और सूचकांक है:

CREATE TABLE [dbo].[Answer_Details_23](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [UserID] [int] NOT NULL,
    [SurveyID] [int] NOT NULL,
    [CustomerID] [int] NOT NULL default 0,
    [SummaryID] [int] NOT NULL,
    [QuestionID] [int] NOT NULL,
    [RowID] [int] NOT NULL default 0,
    [OptionID] [int] NOT NULL default 0,
    [EnteredText] [ntext] NULL,
 CONSTRAINT [Answer_Details_23_PK] PRIMARY KEY NONCLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

CREATE NONCLUSTERED INDEX [IDX_Answer_Details_23_SummaryID_QuestionID] ON [dbo].[Answer_Details_23]
(
    [SummaryID] ASC,
    [QuestionID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

मैंने इस क्वेरी को निष्पादित किया:

set statistics time on;
select summaryid, count(summaryid) from Answer_Details_23 group by summaryid order by count(summaryid) desc;
set statistics time off;

पुराने सर्वर - SQL सर्वर निष्पादन समय: सीपीयू समय = 419 एमएस, बीता समय = 695 एमएस।

नई सर्वर - SQL सर्वर निष्पादन टाइम्स: सीपीयू समय = 1340 एमएस, बीता हुआ समय = 1636 एमएस।

EXECUTION PLANS यहां अपलोड किए गए हैं: http://we.tl/ARbPuvf9t8

बाद में अपडेट करें:

  • AMD 2.1GHz ओपर्टन 16 कोर प्रोसेसर इंटेल 2.5GHz क्वाड कोर प्रोसेसर की तुलना में बहुत खराब लगते हैं
  • उच्च शक्ति को बैलेंस्ड से उच्च शक्ति में विंडोज बिजली के विकल्प बदलने के महान सुधार
  • इसके अतिरिक्त सुधार 8 के समानांतर डिग्री की अधिकतम डिग्री और लागत सीमा को 4 में बदल रहा है

अब, SQL सर्वर निष्पादन समय: सीपीयू समय = 550 एमएस, बीता हुआ समय = Server२ Server एमएस।

यह पुराने सर्वर से अभी भी बदतर है, लेकिन यह बुरा नहीं है। यदि आपके पास कोई अन्य सुझाव (स्थानीय क्वेरी ऑप्टिमाइज़ेशन के अलावा) है तो कृपया बेझिझक टिप्पणी करें।


टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
पॉल व्हाइट 9

जवाबों:


8

मेरे पास SQL ​​सर्वर के साथ समान समस्याएं हैं, यह संभव है कि आपका सर्वर आशावादी रूप से कॉन्फ़िगर नहीं किया गया है। Newer Xeons TurboBoost, HT, आदि के साथ आते हैं जो सर्वर के प्रदर्शन को काफी प्रभावित कर सकते हैं।

उदाहरण के लिए, हमें सफलता मिली है; डेल सर्वर के लिए कम विलंबता कॉन्फ़िगरेशन

सेटिंग्स गैर-डेल सर्वर पर लागू होंगी, उनके पास बस अलग-अलग नाम हो सकते हैं।

हमने बैलेंस्ड से उच्च प्रदर्शन के लिए विंडोज़ पावर मैनेजमेंट प्रोफाइल की स्थापना करके प्रदर्शन में सुधार किया। एक अंतिम टुकड़ा यह है कि यह x64 सर्वर पर ओएस के लिए 8 जीबी तक मेमोरी आरक्षित करने की सिफारिश की जाती है, डिफ़ॉल्ट एसक्यूएल इंस्टॉल सभी मेमोरी लेता है। आप अपने अधिकतम SQL सर्वर मेमोरी कॉन्फ़िगरेशन को कुल मेमोरी से 4 / 8GB कम करके 4 / 8GB आरक्षण का प्रयास करना चाह सकते हैं।

यदि संभव हो तो मेरी सिफारिश पुराने सर्वर पर वापस आ जाएगी। यदि आपके पास प्रतिगमन / स्वचालन / लोड स्क्रिप्ट उपलब्ध नहीं है, तो आप जो भी कर सकते हैं वह उच्च गतिविधि अवधि के दौरान 1-4 घंटे के लिए अपनी सिस्टम गतिविधि को रिकॉर्ड करने के लिए है। फिर स्क्रिप्ट को चलाने के लिए वेब सर्वर को उत्पादन और क्लाइंट मशीन के समान सेटअप करें। नए सर्वर के खिलाफ समान गतिविधि चलाएं, कॉन्फ़िगरेशन में बदलाव करें और उसी गतिविधि को फिर से चलाएं। वास्तव में आप बहुत कुछ करना चाहते हैं, लेकिन ऐसा प्रतीत नहीं होता है कि यह व्यवहार्य होगा और इस प्रश्न के दायरे से बाहर है।


सर्वर पर लोड इतना अधिक नहीं है। SQL सर्वर आमतौर पर 20-35 जीबी मेमोरी में बैठता है। किसी भी समय हमारे पास 16 जीबी से अधिक मुफ्त मेमोरी थी। इसके अलावा प्रोसेसर ususally 10-15% उपयोग पास नहीं करता है।
prog_sr08

2
उच्च शक्ति संतुलित से उच्च शक्ति तक विंडो पावर प्रबंधन स्थापित करके अब तक का सबसे बड़ा सुधार। तो यह वास्तव में एक प्रोसेसर समस्या की तरह दिखता है। SQL सर्वर निष्पादन समय: CPU समय = 892 एमएस, बीता समय = 874 एमएस।
prog_sr08

8

मुझे पता है कि क्या जाँच / सत्यापन करना है

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

अपडेट के बाद

योजनाएं काफी अलग हैं। पुराने प्लान में स्टैक पर एक स्ट्रीम एग्रीगेट कम था जो वास्तव में एक खराब कार्डिनलिटी अनुमान (141k बनाम 108k) है और हैश मैथ आगे की गलतफहमी, दूसरा तरीका (35k बनाम 108k) है। नई योजना में स्ट्रीम एग्रीगेट नहीं है और शीर्ष पर सभी तरह के सटीक अनुमान हैं। बेशक, यह स्पष्ट नहीं करता है कि पुरानी योजना क्यों तेजी से निष्पादित कर रही थी ।

नीचे के स्कैन में थोड़ी अलग पंक्ति संख्या है (महत्वपूर्ण नहीं) लेकिन काफी भिन्न लागतें हैं: पुरानी 2.49884 (IO 2.28979 CPU 0.20905) बनाम नया 1.59109 (IO 1.53868 CPU 0.0524084) है। फिर से एक बेहतर 2012 निष्पादन की ओर इशारा करेंगे (सूचकांक पुनर्निर्माण ने शायद विखंडन को कम कर दिया है?)।

जो बहुत भिन्न है वह थ्रेड की संख्या है: 32 में नई (प्रत्येक हो रही ~ 23k पंक्तियों) बनाम 8 में पुरानी (प्रत्येक हो रही ~ 95k पंक्तियों)। टेबल काफी संकरी है। यह हो सकता है कि बड़ी संख्या में धागे वास्तव में बहुत अधिक कैश अमान्य होने के कारण प्रदर्शन को नुकसान पहुंचा रहे हैं । मैं कोशिश करूँगा:

  1. नए सर्वर कॉन्फ़िगरेशन (यदि कोई हो) और / या में हाइपरथ्रेडिंग को समाप्त करें
  2. DOP 8 के साथ क्वेरी का प्रयास करें।

आपकी टिप्पणी को देखा:

अधिकतम 8 क्वेरी के साथ निष्पादन योजना को जोड़ा गया वास्तव में इस तरह से तेज है

यह शायद सिर्फ एक दूसरे के पैर की उंगलियों पर CPU कदम है। SSO के स्थान पर IO संभवतः कुछ भी नहीं के बगल में है और 32 स्कैनर के लिए तालिका निश्चित रूप से बहुत छोटी है। वह विनिमय स्वैप संभवतः L1 / L2 को लगातार अमान्य कर रहा है।


1
2008 की तुलना में 2012 में सब कुछ बहुत धीमा है। मैं यहां प्रश्नों का अनुकूलन करने की कोशिश नहीं कर रहा हूं। मुझे इस नए सर्वर पर ठीक उसी डेटाबेस के साथ कम से कम समान प्रदर्शन करने में खुशी होगी।
prog_sr08

1
प्रतीक्षा और कतार प्रश्नों के अनुकूलन के बारे में नहीं है। अड़चनों की पहचान करने के बारे में है।
रेमस रूसु

मैंने दस्तावेज़ डाउनलोड किया। बहुत दिलचस्प लग रहा है। मैं अभी इस पर हूं, लेकिन ऐसा लग रहा है कि यह मुझे थोड़ी देर के लिए ले जाएगा। क्या आप सुझाव दे सकते हैं कि पहले कहाँ देखना है?
prog_sr08

1
प्रतीक्षा आँकड़े । 2008 और 2012 दोनों पर उन्हें रीसेट करें, दोनों पर 5-10 मिनट के लिए लोड चलाएं, फिर 2008 और 2012 के बीच अंतर की तुलना करें।
रेमस रुसानु

मुझे डर है कि मैं अब 2 सर्वरों के बीच आँकड़ों की तुलना नहीं कर सकता, क्योंकि नया सर्वर एक लाइव साइट / डेटाबेस को होस्ट करता है। पुराने सर्वर पर डेटाबेस था जो अब लोड के अधीन नहीं है।
prog_sr08

3

अधिकांश आधुनिक मल्टी-कोर सिस्टम और विशेष रूप से मल्टी-सीपीयू सिस्टम के लिए, हार्डवेयर आर्किटेक्चर ऐसा है कि मेमोरी के कुछ भाग कुछ कोर / प्रोसेसर से बहुत दूर हैं, और मेमोरी के कुछ हिस्से कुछ कोर / प्रोसेसर के करीब हैं। इसे नॉन-यूनिफॉर्म मेमोरी आर्किटेक्चर या शॉर्ट के लिए NUMA के रूप में जाना जाता है। आप चाहते हैं कि आपका MAXDOP किसी NUMA नोड के प्रति कोर की संख्या से मिलान करने के लिए किसी दिए गए सुमा नोड की संख्या को कम करने के लिए डेटा के लिए अपनी स्वयं की मेमोरी के बाहर जाने की आवश्यकता है।

आप अपनी नई मशीन के विन्यास की जांच करने के लिए निम्नलिखित का उपयोग कर सकते हैं, और सुनिश्चित करें कि MAXDOP सबसे अच्छी सेटिंग, हार्डवेयर-वार पर सेट हो :

DECLARE @CPUs int;
DECLARE @NumaNodes int;
DECLARE @ServerRAMInMB int;

SET @ServerRAMinMB = (SELECT (i.physical_memory_kb / 1024) AS ServerMemory 
    FROM sys.dm_os_sys_info i);
SET @CPUs = (SELECT i.cpu_count from sys.dm_os_sys_info i);
SET @NumaNodes = (SELECT MAX(c.memory_node_id) + 1 FROM sys.dm_os_memory_clerks c 
    WHERE memory_node_id < 64);

SELECT @ServerRamInMB, @CPUs, @NumaNodes;

IF @CPUs > 4 /* this would be 4 cores, not 4 CPUs */
BEGIN
    DECLARE @MaxDOP int;
    SET @MaxDOP = @CPUs * 0.75;
    IF @MaxDOP > (@CPUs / @NumaNodes) SET @MaxDOP = (@CPUs / @NumaNodes);
    EXEC sp_configure 'max degree of parallelism', @MaxDOP;
    EXEC sp_configure 'cost threshold for parallelism', 4; 
END

मैंने @ServerRamInMBपैरामीटर को यहां शामिल किया है क्योंकि मैं इसका उपयोग उन मानों Max Server Memoryऔर Min Server Memoryकॉन्फ़िगरेशन विकल्पों को सेटअप करने के लिए करता हूं जो दिए गए सर्वर के लिए उपयुक्त हैं।


1
मेरे पास 64 जीबी रैम, 32 प्रोसेसर कोर, 4 सुमा नोड्स हैं। मैंने अधिकतम समानता की संख्या 8 और लागत सीमा 4. से सेट की है। इस सेटिंग के साथ और उच्च शक्ति, SQL सर्वर निष्पादन समय पर सेट शक्ति विकल्प के साथ: CPU समय = 550 एमएस, बीता समय = 828 एमएस।
prog_sr08

तो यह एक जीत है, फिर? खुशी है कि आप के लिए काम करता है!
मैक्स वर्नोन

0

आप किस संस्करण और लाइसेंसिंग मोड में हैं? आप शायद सभी कोर का उपयोग नहीं कर रहे हैं। इस पृष्ठ पर नोट देखें - http://msdn.microsoft.com/en-us/library/ms143760.aspx

"सर्वर + क्लाइंट एक्सेस लाइसेंस (सीएएल) आधारित लाइसेंसिंग के साथ एंटरप्राइज एडिशन प्रति SQL सर्वर इंस्टेंस के अधिकतम 20 कोर तक सीमित है।"


2
यह केवल तभी लागू होगा जब उसके पास पहले CAL और दादाजी थे। फिर भी केवल 20 कोर के साथ प्रदर्शन को पूर्व प्रणाली पर ध्यान नहीं देना चाहिए (जिसमें केवल 8 थे)।
हारून बर्ट्रेंड

मेरे पास वेब संस्करण (सीमित 4 सॉकेट या 16 कोर से कम) है। पुराने सर्वर पर मेरे पास वैसे भी केवल 8 कोर थे।
प्रोग_एसआर ०

0

मुझे इस पृष्ठ में वर्णित के रूप में एक ही समस्या थी: बिजली की सेटिंग्स को "संतुलित" से "उच्च प्रदर्शन" में बदलना एक नाटकीय अंतर बना दिया - प्रतिक्रिया समय को दोगुना करने से अधिक। अब जब हम SSDs का उपयोग कर रहे हैं तो मुझे नहीं लगता कि ऊर्जा की खपत वह मुद्दा है जो यह हो सकता है।


-2

मैं भी इस मुद्दे को कम से कम 2 सप्ताह के लिए किसी भी मजबूत संकल्प के बिना दूसरे मुद्दे के साथ भ्रमित करने के बजाय चला गया हूं।

अंत में संकल्प निम्नानुसार है: -

  1. मैंने 010 से 011 तक संगतता को रीसेट कर दिया है

  2. मास्टर डेटाबेस की संगतता को भी रीसेट करें। डिफ़ॉल्ट रूप से sql पुरानी संगतता सेटिंग को बनाए रखेगा। हमें मैन्युअल रूप से बदलने की आवश्यकता है।

शुभकामनाएं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.