Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Анализиране на I/O производителността за SQL Server

Едно от най-често срещаните затруднения в производителността, които виждам като консултант, е неадекватната производителност на подсистемата за съхранение. Има редица причини за лошото представяне на съхранение, но измерването му и разбирането на това какво трябва да се измерва и наблюдава винаги е полезно упражнение.

Всъщност има три основни показатели, които са най-важни, когато става въпрос за измерване на производителността на I/O подсистемата:

Закъснение

Първият показател е латентността, което е просто времето, необходимо за завършване на I/O. Това често се нарича време за реакция или време за обслужване. Измерването започва, когато операционната система изпрати заявка до устройството (или дисковия контролер) и завършва, когато устройството завърши обработката на заявката. Четенията са завършени, когато операционната система получи данните, докато записите са завършени, когато устройството информира операционната система, че е получило данните.

При записвания данните може да са все още в DRAM кеш на устройството или дисковия контролер, в зависимост от вашата политика за кеширане и хардуер. Кеширането с обратно записване е много по-бързо от кеширането чрез запис, но изисква резервно копие на батерията за дисковия контролер. За използване на SQL Server искате да сте сигурни, че използвате кеширане с обратно записване, а не чрез кеширане на запис, ако изобщо е възможно. Също така искате да се уверите, че вашият хардуерен дисков кеш е действително активиран, тъй като някои инструменти за управление на дискове на доставчик го деактивират по подразбиране.

Входно/изходни операции в секунда (IOPS)

Вторият показател е входно/изходни операции в секунда (IOPS). Този показател е пряко свързан с латентността. Например, постоянна латентност от 1 ms означава, че устройството може да обработи 1000 IOs в секунда с дълбочина на опашката 1. Тъй като към опашката се добавят повече IO, латентността ще се увеличи. Едно от основните предимства на флаш паметта е, че може да чете/записва на множество NAND канали паралелно, заедно с факта, че няма електромеханични движещи се части, които да забавят достъпа до диска. IOPS всъщност е равен на дълбочината на опашката, разделена на латентността, а IOPS сам по себе си не отчита размера на трансфера за прехвърляне на отделен диск. Можете да превеждате IOPS в MB/sec и MB/sec в латентност, стига да знаете дълбочината на опашката и размера на трансфера.

Последователна пропускателна способност

Последователната пропускателна способност е скоростта, с която можете да прехвърляте данни, обикновено измерена в мегабайти в секунда (MB/sec) или гигабайти в секунда (GB/sec). Вашият последователен показател за пропускателна способност в MB/sec е равен на IOPS, умножен на размера на трансфера. Например, 556 MB/sec се равняват на 135 759 IOPS по 4096 байта за прехвърляне, докато 135 759 IOPS по размер на прехвърляне от 8192 байта ще бъдат 1112 MB/sec последователна пропускателна способност. Въпреки ежедневната си важност за SQL Server, последователната дискова пропускателна способност често се променя в корпоративното хранилище, както от доставчиците на хранилища, така и от администраторите на хранилища. Също така всъщност е доста често срещано явление да виждате действителните магнитни дискове в кутия с директно прикачено съхранение (DAS) или устройство в мрежа за съхранение (SAN) да са толкова заети, че не могат да осигурят пълната си номинална последователна пропускателна способност.

Последователната пропускателна способност е от решаващо значение за много често срещани сървърни дейности на базата данни, включително пълно архивиране и възстановяване на база данни, създаване и възстановяване на индекси и последователни сканирания от тип хранилище за данни (когато вашите данни не се вписват в буферния пул на SQL Server). Една цел за производителност, за която обичам да стрелям при нови компилации на сървър на база данни, е да имам поне 1 GB/sec последователна пропускателна способност за всяка отделна буква на устройството или точка на монтиране. Притежаването на това ниво на производителност (или по-добро) прави живота ви много по-лесен като професионалист по база данни. Това прави толкова много от общите ви задачи по база данни много по-бързи, а също така ви дава свободата да правите по-честа настройка на индекса, когато можете да създадете индекс на голяма таблица за секунди или минути вместо часове.

Показатели за работното натоварване за вход/изход на SQL сървър

Когато става въпрос за SQL Server и I/O производителност, има редица неща, които трябва да измервате и наблюдавате във времето. Трябва да знаете съотношението четене спрямо запис за вашето работно натоварване за всички ваши файлове с потребителска база данни и за tempdb. Съотношенията ще бъдат различни за различните типове файлове на SQL Server и работни натоварвания. Можете да използвате моите DMV Diagnostic Queries, за да определите това, и можете също да използвате изгледа на Disk Activity View в SQL Sentry Performance Advisor, за да получите лесно по-пълна представа за вашата дискова активност, от цялостна картина на високо ниво, чак надолу към отделни файлове:

Съветник за производителност на SQL Sentry:Дискова активност

Трябва също да измервате типичните I/O скорости за IOPS и последователната пропускателна способност. В монитора на производителността на Windows (PerfMon), четене/сек и запис/сек показват IOPS, докато байтовете за четене на диска/сек и записването на диска представляват последователна пропускателна способност. Трябва да използвате PerfMon за измерване на средна дискова секунда/четене и средна дискова секунда/запис, която е латентност за четене и запис на ниво диск. И накрая, можете да използвате моите DMV Diagnostic Queries, за да измерите средната латентност за четене и запис на ниво файл за всички ваши файлове с потребителска база данни, както и за tempdb.

Методи за измерване на I/O производителността

Можете да използвате секцията Disk в Windows Resource Monitor, за да получите бърз преглед в реално време на някои ключови показатели на диска за всичките ви файлове на база данни на SQL Server. Отивайки по-дълбоко, можете да използвате PerfMon за измерване и наблюдение на критичните броячи на производителност, които споменах по-рано. Преди да влезете в производството с нов сървър на база данни, трябва да направите някои тестове за сравнителен тест на диска, за да определите каква производителност може действително да осигури вашата I/O подсистема. Това всъщност не е толкова трудно или отнема много време (ако използвате правилните инструменти), но често се забравя, когато бъде осигурен и тестван нов сървър на база данни.

Първият бенчмарк на диска, който винаги трябва да изпълнявате, е CrystalDiskMark 4.0, който наскоро беше пренаписан, за да използва сравнително новата програма за сравнително тестване на дискове Microsoft DiskSpd. Потребителският интерфейс на CDM 4.0 ви позволява да избирате по-широк набор от размери на тестови файлове и също така ви позволява да избирате дълбочината на опашката и броя на нишките за тестовите стартирания. Това ви позволява да получите по-подобно на сървъра I/O работно натоварване и също така ви позволява по-правилно да стресирате по-новите NVMe флаш устройства за съхранение, които могат да се справят с дълбочини на опашката над 32.

CrystalDiskMark 4.03 Резултати с QD =32 и нишки =1

Фигура 2:CrystalDiskMark 4.03 Резултати с QD =32 и нишки =4

За разлика от предишните версии на CDM, двата най-подходящи реда за използване на SQL Server са в средата на дисплея на резултатите. Те са 4K произволно четене и запис с голяма дълбочина на опашката (32 по подразбиране) и последователното четене и запис. След като направите някои сравнителни тестове за съхранение с CrystalDiskMark 4.0, трябва да направите някои по-изчерпателни тестове с Microsoft DiskSpd. В една бъдеща статия ще разгледам как да използвам DiskSpd за по-пълно тестване за SQL Server.


  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 Server

  2. Преобразувайте текстовата стойност в SQL Server от UTF8 в ISO 8859-1

  3. Как да използвам GROUP BY за конкатенация на низове в SQL Server?

  4. Обяснение на НЯКОИ оператор на SQL Server

  5. Как да проверя дали съществува колона в таблица на SQL Server?