sql >> Databáze >  >> RDS >> Sqlserver

Analýza I/O výkonu pro SQL Server

Jedním z nejčastějších překážek výkonu, které jako konzultant vidím, je nedostatečný výkon úložného subsystému. Existuje řada důvodů pro špatný výkon úložiště, ale jeho měření a pochopení toho, co je třeba měřit a monitorovat, je vždy užitečné cvičení.

Ve skutečnosti existují tři hlavní metriky, které jsou nejdůležitější, pokud jde o měření výkonu I/O subsystému:

Latence

První metrikou je latence, což je jednoduše doba, kterou trvá dokončení I/O. To se často nazývá doba odezvy nebo doba služby. Měření začíná, když operační systém odešle požadavek na jednotku (nebo řadič disku) a končí, když jednotka dokončí zpracování požadavku. Čtení jsou dokončena, když operační systém přijme data, zatímco zápisy jsou dokončeny, když jednotka informuje operační systém, že data přijala.

Pro zápisy mohou být data stále v mezipaměti DRAM na jednotce nebo řadiči disku, v závislosti na zásadách ukládání do mezipaměti a hardwaru. Ukládání do mezipaměti zpětného zápisu je mnohem rychlejší než ukládání do mezipaměti procházejícího zápisem, ale vyžaduje záložní baterii pro řadič disku. Při použití serveru SQL Server se chcete ujistit, že používáte ukládání do mezipaměti se zpětným zápisem spíše než ukládání do mezipaměti pro zápis, pokud je to vůbec možné. Také se chcete ujistit, že je hardwarová disková mezipaměť skutečně povolena, protože některé nástroje pro správu disků ji ve výchozím nastavení zakazují.

Operace vstupu/výstupu za sekundu (IOPS)

Druhou metrikou jsou Input/Output Operations per Second (IOPS). Tato metrika přímo souvisí s latencí. Například konstantní latence 1 ms znamená, že jednotka může zpracovat 1 000 IO za sekundu s hloubkou fronty 1. Čím více IO jsou přidávány do fronty, latence se zvyšuje. Jednou z klíčových výhod flash úložiště je to, že dokáže číst/zapisovat do více kanálů NAND paralelně, spolu se skutečností, že zde nejsou žádné elektromechanické pohyblivé části, které by zpomalovaly přístup k disku. IOPS se ve skutečnosti rovná hloubce fronty dělené latencí a IOPS sám o sobě nezohledňuje velikost přenosu pro přenos jednotlivého disku. Můžete převést IOPS na MB/s a MB/s na latenci, pokud znáte hloubku fronty a velikost přenosu.

Sekvenční propustnost

Sekvenční propustnost je rychlost, kterou můžete přenášet data, obvykle měřená v megabajtech za sekundu (MB/s) nebo gigabajtech za sekundu (GB/s). Vaše sekvenční metrika propustnosti v MB/s se rovná IOPS krát velikost přenosu. Například 556 MB/s se rovná 135 759 IOPS krát přenosová velikost 4 096 bajtů, zatímco 135 759 IOPS krát přenosová velikost 8 192 bajtů by byla 1 112 MB/s sekvenční propustnosti. Navzdory svému každodennímu významu pro SQL Server se sekvenční disková propustnost v podnikovém úložišti často snižuje, a to jak ze strany prodejců úložiště, tak ze strany správců úložiště. Ve skutečnosti je také docela běžné vidět, že skutečné magnetické disky ve skříni s přímo připojeným úložištěm (DAS) nebo v zařízení SAN (Storage Area Network) jsou tak zaneprázdněné, že nemohou poskytnout svou plnou jmenovitou sekvenční propustnost.

Sekvenční propustnost je kritická pro mnoho běžných činností databázových serverů, včetně úplného zálohování a obnovy databáze, vytváření a obnovy indexů a sekvenčního čtení prohledávání typu velkého datového skladu (když se vaše data nevejdou do oblasti vyrovnávacích pamětí serveru SQL Server). Jedním z výkonnostních cílů, o které se u nových sestav databázových serverů snažím, je mít alespoň 1 GB/s sekvenční propustnosti pro každé písmeno jednotky nebo přípojný bod. Tato úroveň výkonu (nebo lepší) vám jako databázovému profesionálovi mnohem usnadňuje život. Díky tomu je mnoho vašich běžných databázových prací mnohem rychlejší a také vám dává svobodu provádět častější ladění indexu, když můžete vytvořit index na velké tabulce během několika sekund nebo minut namísto hodin.

Metriky zátěže SQL Server I/O

Pokud jde o výkon SQL Server a I/O, existuje řada věcí, které byste měli měřit a sledovat v průběhu času. Měli byste znát poměr čtení a zápisu pro vaši pracovní zátěž pro všechny soubory databáze uživatelů a pro tempdb. Poměry se budou lišit pro různé typy souborů SQL Server a pracovní zatížení. K určení toho můžete použít moje diagnostické dotazy DMV a také můžete použít Zobrazení aktivity disku v SQL Sentry Performance Advisor, abyste snadno získali úplnější přehled o aktivitě vašeho disku, od celkového obrazu na vysoké úrovni až dolů. k jednotlivým souborům:

Poradce pro výkon SQL Sentry:Aktivita disku

Měli byste také měřit typické I/O rychlosti pro IOPS a sekvenční propustnost. V nástroji Sledování výkonu systému Windows (PerfMon) hodnoty čtení/s a zápisy/s ukazují IOPS, zatímco čtení disku bajty/s a zápis bajtů/s disku představují sekvenční propustnost. PerfMon byste měli použít k měření průměrného disku sec/čtení a průměrného disku s/zápis, což je latence čtení a zápisu na úrovni disku. Nakonec můžete použít moje diagnostické dotazy DMV k měření průměrné latence čtení a zápisu na úrovni souborů pro všechny vaše soubory databáze uživatelů a také pro tempdb.

Metody pro měření I/O výkonu

Sekci Disk v nástroji Windows Resource Monitor můžete použít k získání rychlého zobrazení některých klíčových diskových metrik pro všechny vaše databázové soubory SQL Server v reálném čase. Když půjdeme hlouběji, můžete použít PerfMon k měření a sledování kritických čítačů výkonu, které jsem již zmínil. Než se pustíte do výroby s novým databázovým serverem, měli byste provést nějaké srovnávací testy disku, abyste zjistili, jaký druh výkonu může váš I/O subsystém skutečně poskytovat. To ve skutečnosti není tak obtížné nebo časově náročné (pokud používáte správné nástroje), ale často se na to zapomene, když je zřízen a testován nový databázový server.

Prvním testem disku, který byste měli vždy spustit, je CrystalDiskMark 4.0, který byl nedávno přepsán tak, aby používal relativně nový program pro testování disků Microsoft DiskSpd. Uživatelské rozhraní CDM 4.0 vám umožňuje vybrat si širší rozsah velikostí testovacích souborů a také vám umožňuje zvolit hloubku fronty a počet vláken pro testovací běhy. To vám umožní získat více serverové I/O zátěže a také vám umožní lépe zatěžovat novější NVMe flash-úložiště, která zvládnou fronty s hloubkou vyšší než 32.

CrystalDiskMark 4.03 Výsledky s QD =32 a vlákny =1

Obrázek 2:CrystalDiskMark 4.03 Výsledky s QD =32 a vlákny =4

Na rozdíl od předchozích verzí CDM jsou dva nejrelevantnější řádky pro použití SQL Serveru uprostřed zobrazení výsledků. Jsou to 4K náhodné čtení a zápisy s vysokou hloubkou fronty (ve výchozím nastavení 32) a sekvenční čtení a zápis. Poté, co provedete několik testů srovnávacích testů úložiště s CrystalDiskMark 4.0, měli byste provést podrobnější testování s Microsoft DiskSpd. V budoucím článku se budu zabývat tím, jak používat DiskSpd k provedení úplnějšího testování pro SQL Server.


  1. Jak generovat skripty pro přidání výchozích omezení do sloupce ve více tabulkách v databázi SQL Server - SQL Server / Výukový program TSQL část 94

  2. Mohu použít ADFS 2.0 k ověření určitých uživatelů proti SQL Server?

  3. Jak použít klauzuli Haveing ​​with Group by in Select Query - SQL Server / TSQL Tutorial, část 131

  4. Jak ukládat historické záznamy do tabulky historie na SQL Server