Czytanie stron
We/Wy z wystąpienie SQL Server Database Engine zawiera odczytów logicznych i fizycznych. Logiczną odczytać występuje co czas Database Engine zgłasza żądanie strona z bufor pamięć podręczna.Jeśli strona nie jest aktualnie w pamięci podręcznej buforu, fizycznego odczytać kopie pierwszej strony z dysku do pamięci podręcznej.
Żądania odczytu, generowany przez wystąpienie Database Engine są kontrolowane przez aparat relacyjnych i zoptymalizowane przez aparat magazynu. aparat relacyjny określa najbardziej efektywne metoda dostępu (takie jak skanowanie tabela, skanowanie indeksu lub dostosowane odczytu), metoda dostępu i Menedżer buforu części aparat magazynu określić ogólne deseń odczytów do wykonywania i zoptymalizować odczytów, wymagane do wykonania metoda dostępu.Wykonywanie partia wątek planuje odczytów.
Odczyt z wyprzedzeniem
The Database Engine supports a performance optimization mechanism called read-ahead.Odczyt wyprzedzeniem przewiduje niezbędne do spełnienia plan wykonania kwerend strony danych i indeksu i przełącza stron w pamięci podręcznej bufor przed rzeczywistości są one używane przez kwerendę.Dzięki temu obliczeń i we/wy na siebie zachodzić, pełnego wykorzystania PROCESORA i dysku.
Umożliwia odczytu z wyprzedzeniem mechanizm Database Engine Aby przeczytać maksymalnie 64 sąsiadujących ze sobą stron (512 KB) z jednego pliku. Pojedynczego punktowego zbieranie odczytu do odpowiedniej liczby buforów (prawdopodobnie nieciągłych) w pamięci podręcznej buforu odczytu jest wykonywane.Jeśli strona w zakres są już obecne w buforze pamięci podręcznej, odpowiadające im strona z odczytu zostaną usunięte po zakończeniu odczytu.Zakres stron, które mogą również być "okrojone" z jednego z końców Jeśli odpowiednich stronach znajdują się już w pamięci podręcznej.
Istnieją dwa rodzaje odczytu z wyprzedzeniem: jeden dla strony danych, a drugiego dla strony indeksu.
Odczytywanie danych strony
Tabela skanowania używanej przy odczycie danych strony są bardzo wydajny w Database Engine. Mapa alokacji indeksu (IAM) ze stron w SQL Server bazy danych na liście zakresów, używane przez tabela lub indeksu. Aparat magazynu może odczytywać IAM zbudować posortowanej listy adresów dysku, które muszą być odczytywane.Dzięki temu aparat magazynu w celu zoptymalizowania jego operacji We/Wy jako duże odczyty sekwencyjne, wykonywane w kolejności, w zależności od ich lokalizacji na dysku.Aby uzyskać więcej informacji na temat IAM stron zobacz Zarządzanie obszar używany przez obiekty.
Odczytywanie indeksu strony
Aparat magazynu odczytuje strony indeksu pojedynczo w porządku klucz.Na przykład na ilustracji przedstawiono uproszczony reprezentacji zestawu stron typu liść, który zawiera zestaw kluczy i Węzeł pośredni indeksu mapowanie stron typu liść.Aby uzyskać więcej informacji na temat struktury stron w indeksie zobacz Struktury indeks klastrowany.
.gif)
Aparat magazynu korzysta z informacji zawartych w pośredniego strona indeksu powyżej poziomu typu poziom liścia na planowanie szeregowego aheads odczytu stron, które zawierają klucze.Jeśli pojawia się żądanie do wszystkich kluczy z ABC do DEF, aparat magazynu najpierw odczytuje strona indeksu nad stroną typu liść.Jednak to nie tylko odczytuje każdą strona danych w kolejności od strona 504 do strona 556 (ostatniej strona z kluczami w określonym zakresie).Zamiast tego aparat magazynu skanuje strona pośrednich indeksu i tworzy listę stron typu liść, które muszą być odczytywane.Aparat magazynu następnie planuje wszystkie operacje odczytu w kolejności klucz.Aparat magazynu rozpoznaje także, że strony 504/505 i 527/528 są ciągłe i wykonuje pojedynczego punktowego odczytu do pobierania kolejnych stron w jednej operacji.Jeśli nie ma wiele stron, które mają być pobrane w komunikacji szeregowej, aparat magazynu planuje blok odczytów w danej chwili.Po zakończeniu podzbiór tych odczytów aparat magazynu planuje równą liczbę nowe operacje odczytu, dopóki wszystkie operacje odczytu wymagane zostały zaplanowane.
Aparat magazynu używa prefetching do szybkiego wyszukiwania tabela bazowa od ponownego zbudowania indeksów nie klastrowanych.Wiersze typu liść indeks nieklastrowany zawierają wskaźniki do wierszy danych, które zawierają każdej określonej wartości klucz.Jak aparat magazynu odczytuje za pomocą stron typu liść nieklastrowany indeks, również uruchamiania planowania Asynchroniczne odczyty dla wierszy danych, których łącza mają już pobrania.Dzięki temu aparat magazynu w celu pobrania wierszy danych z tabela podstawowej, zanim zostanie ukończona skanowania indeks nieklastrowany.Prefetching jest używany niezależnie od tego, czy tabela ma indeks klastrowany.SQL Server Flaga używa prefetching więcej niż inne wersje SQL Server, umożliwiając więcej stron do odczytu do przodu. Poziom prefetching nie jest konfigurowany w żadnej wersji.Aby uzyskać więcej informacji na temat ponownego zbudowania indeksów nie klastrowanych zobacz Struktury indeks nieklastrowany.
Zaawansowane skanowania
W SQL Server Enterprise, funkcja skanowania zaawansowane umożliwia wielu zadań, aby współużytkować tabela pełnego skanowania. Jeśli planowane jest wykonanie z Transact-SQL Instrukcja wymaga skanowania stron danych w tabeli oraz Database Engine wykrywa, że tabela jest już skanowania dla innego planu wykonania, Database Engine przyłącza się do pierwszej, drugiej skanowania w bieżącej lokalizacji drugiego skanowania. The Database Engine reads each strona one czas and passes the rows from each strona to both execution plans. Ten proces jest kontynuowany aż do osiągnięcia końca tabela.
W tym punkcie pierwszy plan wykonania ma kompletne wyniki skanowania, ale drugi plan wykonania nadal musi pobrać strony danych, które zostały odczytane przed przyłączeniem się ona skanowanie w toku.Skanowanie w poszukiwaniu drugi plan wykonania następnie zawija się na pierwszej stronie danych w tabela i skanowania do przodu, gdzie on dołączyć pierwszego skanowania.Dowolna liczba skanowania może być łączone w taki sposób.The Database Engine will keep looping through the data pages until it has completed all the scans.Mechanizm ten jest również nazywana "skanowaniem merry-go-round" i demonstruje, dlaczego nie można zagwarantować kolejności wyniki zwróconych z instrukcja SELECT bez klauzula ORDER BY.
Na przykład załóżmy, że istnieje tabela o 500 000 stron.Wykonuje UserA Transact-SQL Instrukcja wymaga skanowanie tabela. Podczas tego skanowania zostało przetworzone 100 000 stron, UserB wykonuje drugi Transact-SQL Instrukcja skanuje tej samej tabela. The Database Engine schedules one zestaw of read requests for pages after 100,001, and passes the rows from each strona back to both scans. Podczas skanowania osiągnie 200,000th strona, UserC wykonuje drugi Transact-SQL Instrukcja skanuje tej samej tabela. Począwszy od strona 200,001, Database Engine przekazuje wiersze z każdej strona odczytuje do wszystkich trzech skanowania. Po odczytuje 500,000th wiersza, skanowanie w poszukiwaniu UserA została zakończona i skanowania UserB i UserC zawijanie ponownie i zacząć czytać strona, zaczynając od strona 1.Gdy Database Engine pobiera strona 100 000, skanowania dla UserB zostało ukończone. Skanowania dla UserC następnie przechowuje przechodzenia samodzielnie, dopóki odczytuje strona 200 000.Na tym etapie wszystkie skanowania zostały zakończone.
Bez skanowania zaawansowane, każdy użytkownik musi konkurować do miejsca w buforze i spowodować, że Rywalizacja o dysk ramię.Tej samej strony może następnie odczytać jeden raz dla każdego użytkownika, zamiast odczytu jeden raz i współużytkowanych przez wielu użytkowników, zmniejszają wydajność i opodatkowania zasobów.