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:
Podczas wykonywania zapytania, które zwraca 9 milionów wierszy, użycie procesora pozostanie na poziomie około 13%, a 9% można przypisać serwerowi sqlserver ... czy nie zwróci wyników szybciej niż 3 minuty, jeśli wszystkie dane byłyby w pamięci RAM?
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.
- Nowe pytanie z planem wykonania zapytania, jeśli chcesz dowiedzieć się, dlaczego nie nasyca IO.