সমস্যা সমাধানের জন্য SOS_SCHEDULER_YIELD অপেক্ষা


14

আমাদের কর্পোরেট ইআরপি (ডায়নামিক্স এ্যাক্স 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
  • পুরো ভিএম এর জন্য এসএসডি।

আমি অন্য জিনিসগুলির জন্য সন্ধানের জন্য কোনও ইনপুটকে স্বাগত জানাব।

উত্তর:


16

সুতরাং আমি এটি সমাধান করেছি, দেখা যাচ্ছে যে আমাদের এসকিউএল সার্ভারে পাওয়ার ম্যানেজমেন্ট বৈশিষ্ট্যগুলি সক্ষম করা হয়েছিল যা সিপিইউ ফ্রিকোয়েন্সিটি উপরে এবং নীচে স্কেল করে যাচ্ছিল, তবে ছোট চাহিদাটি ধরে রাখার জন্য পর্যাপ্ত দ্রুত নয় এবং এসওএস_সেইডুলার_হিল্ড অপেক্ষার প্রবর্তন করেছিল। এটি সর্বদা উচ্চ কার্য সম্পাদনে চলার জন্য পরিবর্তন করার পরে সমস্যাটি চলে গেছে এবং এখন অপেক্ষাগুলি আরও স্বাভাবিক (LatchIO টাইপ স্টাফ)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.