আমাদের কর্পোরেট ইআরপি (ডায়নামিক্স এ্যাক্স 2012) চালিয়ে আমি লক্ষ্য করেছি যে আমাদের উত্পাদন পরিবেশ আমাদের উন্নয়ন ব্যবস্থাগুলির তুলনায় অনেক ধীর বলে মনে হচ্ছে।
ট্রেস চালানোর সময় উন্নয়ন এবং উত্পাদন উভয় পরিবেশে একই ক্রিয়াকলাপ সম্পাদন করার পরে, আমি নিশ্চিত করেছিলাম যে এসকিউএল অনুসন্ধানগুলি আমাদের উত্পাদন পরিবেশের তুলনায় খুব ধীরে ধীরে কার্যকর হচ্ছে (গড় 10-50x ধীর) compared
প্রথমে আমি এটি লোড করার জন্য দায়ী করেছি, এবং ঘন্টাখানেক সময় উত্পাদন পরিবেশে একই ক্রিয়াকলাপগুলি পুনরায় চালিয়েছি এবং ট্রেসগুলিতে একই ফলাফল পেয়েছি।
আমি এসকিউএল সার্ভারে আমার অপেক্ষার পরিসংখ্যানগুলি সাফ করে দিয়েছি তারপরে সার্ভারটিকে কিছুক্ষণের জন্য তার স্বাভাবিক উত্পাদন লোডের অধীনে চালিত হতে দিন এবং তারপরে এই ক্যোয়ারীটি চালিয়ে গেল:
WITH [Waits] AS
(SELECT
[wait_type],
[wait_time_ms] / 1000.0 AS [WaitS],
([wait_time_ms] - [signal_wait_time_ms]) / 1000.0 AS [ResourceS],
[signal_wait_time_ms] / 1000.0 AS [SignalS],
[waiting_tasks_count] AS [WaitCount],
100.0 * [wait_time_ms] / SUM ([wait_time_ms]) OVER() AS [Percentage],
ROW_NUMBER() OVER(ORDER BY [wait_time_ms] DESC) AS [RowNum]
FROM sys.dm_os_wait_stats
WHERE [wait_type] NOT IN (
N'CLR_SEMAPHORE', N'LAZYWRITER_SLEEP',
N'RESOURCE_QUEUE', N'SQLTRACE_BUFFER_FLUSH',
N'SLEEP_TASK', N'SLEEP_SYSTEMTASK',
N'WAITFOR', N'HADR_FILESTREAM_IOMGR_IOCOMPLETION',
N'CHECKPOINT_QUEUE', N'REQUEST_FOR_DEADLOCK_SEARCH',
N'XE_TIMER_EVENT', N'XE_DISPATCHER_JOIN',
N'LOGMGR_QUEUE', N'FT_IFTS_SCHEDULER_IDLE_WAIT',
N'BROKER_TASK_STOP', N'CLR_MANUAL_EVENT',
N'CLR_AUTO_EVENT', N'DISPATCHER_QUEUE_SEMAPHORE',
N'TRACEWRITE', N'XE_DISPATCHER_WAIT',
N'BROKER_TO_FLUSH', N'BROKER_EVENTHANDLER',
N'FT_IFTSHC_MUTEX', N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP',
N'DIRTY_PAGE_POLL', N'SP_SERVER_DIAGNOSTICS_SLEEP')
)
SELECT
[W1].[wait_type] AS [WaitType],
CAST ([W1].[WaitS] AS DECIMAL(14, 2)) AS [Wait_S],
CAST ([W1].[ResourceS] AS DECIMAL(14, 2)) AS [Resource_S],
CAST ([W1].[SignalS] AS DECIMAL(14, 2)) AS [Signal_S],
[W1].[WaitCount] AS [WaitCount],
CAST ([W1].[Percentage] AS DECIMAL(4, 2)) AS [Percentage],
CAST (([W1].[WaitS] / [W1].[WaitCount]) AS DECIMAL (14, 4)) AS [AvgWait_S],
CAST (([W1].[ResourceS] / [W1].[WaitCount]) AS DECIMAL (14, 4)) AS [AvgRes_S],
CAST (([W1].[SignalS] / [W1].[WaitCount]) AS DECIMAL (14, 4)) AS [AvgSig_S]
FROM [Waits] AS [W1] INNER JOIN [Waits] AS [W2] ON [W2].[RowNum] <= [W1].[RowNum]
GROUP BY [W1].[RowNum], [W1].[wait_type], [W1].[WaitS],
[W1].[ResourceS], [W1].[SignalS], [W1].[WaitCount], [W1].[Percentage]
HAVING SUM ([W2].[Percentage]) - [W1].[Percentage] < 95; -- percentage threshold
আমার ফলাফলগুলি নিম্নরূপ:
WaitType Wait_S Resource_S Signal_S WaitCount Percentage AvgWait_S AvgRes_S AvgSig_S
SOS_SCHEDULER_YIELD 4162.52 3.64 4158.88 4450085 77.33 0.0009 0.0000 0.0009
ASYNC_NETWORK_IO 457.98 331.59 126.39 351113 8.51 0.0013 0.0009 0.0004
PAGELATCH_EX 252.94 5.14 247.80 796348 4.70 0.0003 0.0000 0.0003
WRITELOG 166.01 48.01 118.00 302209 3.08 0.0005 0.0002 0.0004
LCK_M_U 145.47 145.45 0.02 123 2.70 1.1827 1.1825 0.0002
সুতরাং আপাতদৃষ্টিতে সর্বাধিক ওয়েট হ'ল SOS_Scheduler_Yield এখন পর্যন্ত, এবং আমি চারপাশে googled এবং দেখেছি এটি সাধারণত সিপিইউ ধরে রাখতে সক্ষম না সম্পর্কিত সম্পর্কিত।
আমি তখন একের পর এক বহুবার এই ক্যোয়ারী চালিয়েছি।
SELECT *
FROM sys.dm_os_schedulers
WHERE scheduler_id < 255
আমি জানি যে আমি শূন্যহীন চালানোযোগ্য_টাস্ক_কাউন্ট বা মুলতুবি_ডিস্ক_ও_কাউন্ট সহ শিডিয়ুলদের সন্ধান করার কথা, তবে এটি মূলত প্রায় সব সময় শূন্য।
আমার আরও উল্লেখ করতে হবে যে সমান্তরালতার সর্বোচ্চ ডিগ্রি 1-এ সেট করা হয়েছিল, যেহেতু ডায়নামিক্স এক্স ওয়ার্কলোড প্রকৃতির সাধারণত ওলটিপি ছিল এবং এটি 8 পরিবর্তন করা উপরের অপেক্ষার পরিসংখ্যানগুলিতে খুব বেশি পার্থক্য করেনি, তারা একই সাথে প্রায় একই রকম হয়ে ওঠে কর্মক্ষমতা সমস্যা।
আমি এখান থেকে কোথায় যাব তার ক্ষতিতে আমি এক ধরণের, আমার কাছে মূলত একটি এসকিউএল সার্ভার রয়েছে যা আপাতদৃষ্টিতে সিপিইউ স্ট্র্যাপড তবে রাননেবল_টাস্ক বা আইওয়ের জন্য অপেক্ষা করছে না।
আমি জানি যে এই এসকিউএল সার্ভারের আইও সাবসিস্টেমটি খুব ভাল নয়, কারণ আসল ডাটাবেসযুক্ত ড্রাইভে এসকিউআইও চালানো বেশ কম সংখ্যক হতে পারে (10MB নির্দিষ্ট ধরণের পাঠ / লেখার জন্য একটি সেকেন্ড ভাবেন), যে বলেছে, দেখে মনে হচ্ছে না যে এসকিউএল এটির জন্য অপেক্ষা করছে কারণ বেশিরভাগ ডাটাবেসকে ক্যাশে করে সার্ভারে মেমরি রয়েছে।
সহায়তা করার জন্য এখানে পরিবেশ সম্পর্কিত কিছু তথ্য রয়েছে:
উৎপাদন পরিবেশ:
- SQL সার্ভার
- এইচপি প্রোলিয়ান ডিএল 360 পি জেন 8
- হাইপারথ্রেডিং (32 লজিকাল কোর) সহ ইন্টেল জিয়ন ই 5-2650 0 @ 2.00GHz এক্স 2
- 184 গিগাবাইট মেমরি
- উইন্ডোজ সার্ভার 2012
- এসকিউএল সার্ভার 2012 স্ট্যান্ডার্ডের 2 টি উদাহরণ (আরটিএম, পাঠানো হয়নি)
- রেড 1 279 জিবি ড্রাইভ (15 কে) সি: ড্রাইভে ডাটাবেস এবং অপারেটিং সিস্টেম রয়েছে
- স্বতন্ত্র, পৃথক ড্রাইভগুলিতে পৃষ্ঠা ফাইল এবং টেম্পডিবি (কঠিন অবস্থা)
আমার ডিভি:
- হাইপার-ভি হোস্ট করা এসকিউএল সার্ভার এবং ডায়নামিক্স এএক্স 2012 এওএস সার্ভার
- হাইপারথ্রেডিং সহ কোর i7 3.4ghz (8 লজিকাল কোর)
- স্মৃতি 8 জিবি
- উইন্ডোজ সার্ভার 2008 আর 2
- পুরো ভিএম এর জন্য এসএসডি।
আমি অন্য জিনিসগুলির জন্য সন্ধানের জন্য কোনও ইনপুটকে স্বাগত জানাব।