DATA_FLUSH_INTERVAL_SECONDS to parametr Query Store określający częstotliwość zapisu zgromadzonych statystyk na dysk.
Rola DATA_FLUSH_INTERVAL_SECONDS w Query Store
DATA_FLUSH_INTERVAL_SECONDS jest opcją konfiguracji Query Store w Microsoft SQL Server. Określa odstęp czasu, po którym zgromadzone w pamięci dane Query Store są okresowo zapisywane w trwałym magazynie powiązanym z bazą danych. Parametr przyjmuje wartość wyrażoną w sekundach, dlatego ustawienie 900 oznacza planowany zapis co 15 minut. Wartość domyślna stosowana przez SQL Server wynosi 900 sekund.
Query Store przechowuje między innymi informacje o wykonaniach zapytań, planach wykonania oraz statystykach zużycia zasobów. Dane nie muszą być natychmiast zapisywane na dysk po każdym zakończonym wykonaniu zapytania. SQL Server może najpierw gromadzić je w pamięci, a następnie zapisać zbiorczo zgodnie z ustawionym interwałem. Ogranicza to liczbę operacji wejścia i wyjścia, ale oznacza też, że najnowsze dane mogą przez pewien czas nie być jeszcze widoczne w trwałym magazynie.
Konfiguracja opcji w konkretnej bazie SQL Server
Opcję ustawia się na poziomie konkretnej bazy danych za pomocą instrukcji ALTER DATABASE. Przykładowa składnia wygląda następująco: ALTER DATABASE [NazwaBazy] SET QUERY_STORE = ON (DATA_FLUSH_INTERVAL_SECONDS = 300);. W tym przykładzie SQL Server otrzymuje żądanie okresowego zapisywania danych Query Store co 300 sekund. Przed zmianą ustawienia należy upewnić się, że Query Store jest włączony dla wskazanej bazy oraz że wykonywana instrukcja odpowiada składni obsługiwanej przez używaną wersję SQL Server.
Aktualną konfigurację można sprawdzać w widokach katalogowych dotyczących Query Store, w szczególności w sys.database_query_store_options. Widok ten pokazuje między innymi stan Query Store, bieżącą wartość interwału zapisu, tryb pracy oraz inne opcje przechowywania danych. Weryfikacja powinna obejmować bazę, której dotyczy problem, ponieważ ustawienia Query Store są przypisane do bazy danych, a nie do pojedynczego zapytania czy jednego planu wykonania.
Różnica między zapisem danych a zbieraniem statystyk
DATA_FLUSH_INTERVAL_SECONDS nie określa częstotliwości próbkowania zapytań ani czasu agregacji statystyk. Za długość przedziału, w którym SQL Server grupuje statystyki dotyczące wykonywania zapytań, odpowiada odrębna opcja INTERVAL_LENGTH_MINUTES. Z kolei częstotliwość zapisu zgromadzonych danych na dysk kontroluje właśnie DATA_FLUSH_INTERVAL_SECONDS. Pomieszanie tych parametrów może prowadzić do błędnej interpretacji raportów Query Store.
Zmiana interwału zapisu nie powoduje automatycznie częstszego wykonywania zapytań ani nie zmienia ich planów wykonania. Nie wpływa też bezpośrednio na czas trwania zapytania, indeksy, statystyki optymalizatora ani ustawienia pamięci. Jej znaczenie dotyczy przede wszystkim trwałości i aktualności danych diagnostycznych. Krótszy interwał może ograniczyć ilość informacji pozostających wyłącznie w pamięci w chwili awarii procesu lub systemu, natomiast zwiększa częstotliwość operacji związanych z zapisem.
Ocena ustawienia podczas analizy problemu
Podczas diagnostyki warto porównać wartość DATA_FLUSH_INTERVAL_SECONDS z czasem wystąpienia badanego zdarzenia. Jeżeli awaria, restart usługi SQL Server albo nagłe wyłączenie systemu nastąpiły krótko po zebraniu nowych statystyk, część danych mogła nie zostać jeszcze utrwalona. Brak najnowszego wpisu w Query Store nie musi więc oznaczać, że zapytanie się nie wykonało. Może wskazywać na oczekiwanie na kolejny cykl zapisu albo na utratę danych pozostających w pamięci.
Zbyt agresywne skracanie interwału nie jest uniwersalnym rozwiązaniem problemów z Query Store. Przed zmianą należy sprawdzić obciążenie systemu, rozmiar i stan magazynu Query Store, komunikaty SQL Server oraz dostępne miejsce na dysku. Po zmianie konfiguracji warto ponownie odczytać sys.database_query_store_options i obserwować, czy dane pojawiają się zgodnie z oczekiwanym harmonogramem. W przypadku komputera lub laptopa z lokalną instalacją SQL Server analiza powinna dodatkowo obejmować stan dysku, system plików i logi usługi bazy danych, ponieważ opóźniony zapis może wynikać również z problemów infrastrukturalnych, a nie z samej wartości parametru.