SQL Server 2016: Novinky System Views

Row-Level Security

Umožňuje omezit přístup uživatelů či skupině uživatelů k záznamům v tabulce na základě stanovených podmínek. Omezení přístupu se děje přímo na databázové vrstvě a je tak pro aplikace transparentní. Jinými slovy SQL server nedovolí uživateli načíst nepovolená data.
Implementace spočívá ve vytvoření Security Policy, která využívá predikát pro určení, zda záznam v tabulce má být vyřazen z výstupu. Predikát je jednoduchá inline funkce, která vrací tabulku. Neexistuje-li ve výstupní tabulce predikátu žádný řádek, záznam je z datové tabulky odfiltrován a nezobrazen na výstupu.

S uvedenou funkcionalitou souvisí dva nové pohledy:

sys.security_policies

Seznam bezpečnostních politik definovaných pro danou databázi.

sys.security_predicates

Seznam predikátů přiřazených k bezpečnostním politikám databáze.

Query Store

Další zajímavou novinkou je Query Store, který lze zapnout pro jednu konkrétní databázi. Server provádí monitoring dotazů a ukládá jejich historii, plány a runtime statistiky. Zpětně můžete analyzovat efektivnost použitých plánů.

Query Store Settings

V principu funguje Query Store poměrně jednoduše. Při prvním spuštění dotazu provede SQL engine analýzu struktury dotazu a podívá se do plan cache, zda-li je plán pro daný dotaz k dispozici. Pokud není provede se vytvoření plánu, jeho kompilace a použije se k získání výsledku, který daný dotaz vrátí uživateli. Query Store si tento plán uloží do svého odděleného úložiště. Můžete si povšimnout, jaký byl vybrán index.

Query Store

V případě druhého spuštění dotazu se použije předkompilovaný plán z Plan Cache. V půběhu času se může změnit struktura indexů zdrojových tabulek, a některé indexy může Query Optimizer vyhodnotit jako výhodnější pro daný dotaz. V tabulce Person jsem vytvořil nový index pro sloupec Title. Při spuštění dotazu proběhne vytvoření nového plánu, který se také uloží do Query Store. Můžete porovnat, který plán je efektivnější pro daný dotaz.

Query Store 2

Dále můžete říci, že si přejete používat pouze tento druhý plán (viz tlačítko Force Plan). Při opětovném spuštění dotazu bude server upřednostňovat vámi zvolený plán.

Query Store Forced Plan

V případě odstranění indexu, který plán používá, dojde k zneplatnění celého plánu. SQL engine se k takto přiřazenému plánu chová jakoby neexistoval a opět použije nějaký jiný existující nebo si jej sám zkompiluje.

Query Store Forced Plan 2

V souvislosti s Query Store tedy přibyly nové pohledy

sys.database_query_store_options
sys.query_context_settings
sys.query_store_plan
sys.query_store_query
sys.query_store_query_text
sys.query_store_runtime_stats
sys.query_store_runtime_stats_interval

Uložené procedury

sp_query_store_flush_db
sp_query_store_reset_exec_stats
sp_query_store_force_plan
sp_query_store_unforce_plan
sp_query_store_remove_plan
sp_query_store_remove_query

sys.dm_exec_session_wait_stats

Přibyly nové informace, které aktuálně vrací tento pohled.

sys.dm_exec_session_wait_stats

Vrací Wait statistiky pro dané sezení. V podstatě vrací stejné informace vztažené k danému sezení jako sys.dm_os_wait_stats doplněné o session_id.