Mam dysk SSD, który przy użyciu testu IOmeter wykazuje wydajność powyżej 200 MB / s. Jednak po uruchomieniu dowolnego zapytania SQL z komputera lokalnego monitor zasobów systemu Windows nigdy nie pokazuje IO dysku powyżej 7 MB / s. Dotyczy to nawet zapytań, których uruchomienie zajmuje ponad 2 minuty. Co może być wąskim gardłem, ponieważ używa tylko 7 MB / s z dysku SSD?
Biegnę:
- Windows Server 2012 Standard
- SQL Server 2008 R2
- Intel i7 3820
- 32 GB pamięci RAM
- dysk SSD Sandisk
sql-server
sql-server-2008-r2
hardware
Dean MacGregor
źródło
źródło
sys.dm_os_waiting_tasks
się działającemu zapytaniu, aby sprawdzić, czy napotyka inne typy oczekiwania.DECLARE @Name VARCHAR(10), @High int; SELECT @Name=name, @High = high FROM master..spt_values
. Tak więc żadne wyniki nie są wysyłane z powrotem do klienta, ale plan i zamówienia będą nadal takie same.Odpowiedzi:
Z łańcucha komentarzy wygląda na to, że interpretacja
ASYNC_NETWORK_IO
czeka, co oznacza, że problem dotyczy sieci. To (zazwyczaj) nie jest.Jak @MartinSmith zasygnalizował (dwukrotnie) najbardziej prawdopodobnym wyjaśnieniem tego jest SSMS lub aplikacja, której używasz, nie zużywając wyników tak szybko, jak SQL Server je obsługuje. Wykonaj jedną z sugerowanych metod, aby usunąć zużycie wierszy z pomiaru, a uzyskasz prawdziwy (r) obraz maksymalnej przepustowości we / wy:
Na wypadek, gdybyś jeszcze tego nie zrobił, musisz oczywiście
DBCC DROPCLEANBUFFERS
upewnić się, że dane są odczytywane z dysku, a nie z bufora bufora. Obowiązują zwykłe zastrzeżenia „tylko podczas testu, nie rób tego w aktywnym środowisku na żywo” itp.Uzupełnienie kilku innych komentarzy:
Co dokładnie testujemy tutaj, jak i dlaczego? Jeśli twoje zapytanie z 9 milionami wierszy jest czymś innym niż a,
SELECT * FROM dbo.SomeTable
wtedy pojawia się 1001 czynników, innych niż tylko surowa przepustowość We / Wy.Twój Intel I7-3820 to 4-rdzeniowy procesor. Jeśli twoje zapytanie testowe nie generuje planu równoległego, byłbym zaskoczony, gdybyś mógł zrzucić ponad 20% wykorzystania procesora z systemu.
3 minuty na zwrócenie 9 milionów wierszy są bardzo podejrzane i sugerują, że nie otrzymujemy pełnego obrazu tego, co testujesz. Domyślam się, że jest to przypadek nieoptymalnego (nierównoległego) planu zapytań, wypełnionego operatorami pętli zagnieżdżonej, ciągnącymi miliony wierszy, tj. Nie tylko jedną tabelę
SELECT
do weryfikacji zużycia IO.Sugeruję:
SELECT *
przetestować tylko IO przez SQL Server.źródło