“Learn T-SQL Querying” – primeiras impressões

learn t-sql queryingEm maio de 2019 foi publicado o livro “Learn T-SQL Querying”. Pensei: mais um… Entretanto, ao tomar conhecimento dos nomes dos autores percebi que esse não seria um livro qualquer sobre t-sql pois foi escrito por Pedro Lopes e Pam Lahoud, que trabalham no grupo de desenvolvimento do SQL Server, na Microsoft. Com certeza que de SQL Server eles entendem!

Na abertura do livro há informações sobre os dois, onde destaco os seguintes trechos:

Pedro Lopes: He is currently responsible for program management of Database Engine features for in-market and vNext versions of SQL Server, with a special focus on the Relational Engine. He has extensive experience with query performance troubleshooting (…)

Pam Lahoud: She (…) is currently responsible for program management of Database Engine features for in-market and vNext versions of SQL Server, with a special focus on the Storage Engine area. She is passionate about SQL Server performance and has focused on performance tuning and optimization, particularly from the developer’s perspective (…)

Sobre esta, Pam Lahoud, já referenciei vídeos e artigos dela aqui no Porto SQL, principalmente quando o assunto foi tempDB.

Como a aquisição deste livro está na fila de e$pera, ainda não o havia lido. Mas há alguns dias, quando eu atualizava a seção de livros do Porto SQL, percebi que a editora Packt disponibilizou a leitura online gratuita do conteúdo completo do livro. E então pude escrever estas “primeiras impressões”.

O prefácio é de Conor Cunningham, que também já foi citado em artigo do Porto SQL.

O primeiro passo foi folhear o livro. De imediato achei interessante o conteúdo dos capítulos 2 a 4, que tratam de plano de execução. Considerando-se que é um livro direcionado ao desenvolvedor em T-SQL, confesso que me surpreendi com o grau de detalhe das informações que geralmente estão presentes em livros que tratam de sql server internals.

Embora o título seja “Learn T-SQL Querying”, este não é um livro para iniciantes em T-SQL. Eu diria que é um livro para aqueles que já programam em T-SQL há algum tempo e que dominam a linguagem SQL mas que desejam conhecer as especificidades da programação em T-SQL e melhorar os códigos sql que criam.

Primeiras impressões, capítulo a capítulo

Me parece que os capítulos de 1 a 7 são direcionados a tratar do dia a dia em programação T-SQL e que os demais capítulos explicam recursos disponíveis no SQL Server para analisar e corrigir problemas de execução, melhorando o desempenho das consultas sql.

Seguem as impressões, capítulo a capítulo.

1. Anatomy of a Query

In this chapter, we will be introduced to the typical components of a T-SQL statement, including the logical order with which SQL Server processes a statement.

Muito superficial este capítulo, sendo mais uma revisão rápida de alguns conceitos. Se você ainda não conhece o básico de Transact-SQL, então não vai ser neste capítulo que aprenderá algo. Considere este capítulo como “o que você já deve saber sobre T-SQL”.

2. Understanding Query Processing

the next logical step is to understand how SQL Server processes and ultimately executes the query. The Query Processor includes query compilation, query optimization, and query execution essentials;

Este segundo capítulo trata dos passos da compilação do código sql da consulta. O capítulo inicia com o fluxograma de processamento do código sql de consulta, o que facilita a compreensão das etapas envolvidas. Através do fluxograma são explicadas as etapas de compilação, otimização, execução e reuso do planos de execução.

Um dos itens do capítulo trata da importância de utilização de parâmetros, inclusive citando parameter sniffing, tema do artigo Introdução ao parameter sniffing.

3. Mechanics of the Query Optimizer

The next step (…) is understanding how the SQL Server database engine optimizes a query; we will do so by exploring T-SQL query optimization internals and architecture, starting with the infamous cardinality estimation process and its building blocks. 

O capítulo inicia revisando conceitos como cardinalidade, frequência, densidade, seletividade, estatísticas e histograma. Trata ainda do funcionamento de cardinality estimator ao longo das versões do SQL Server e encerra com a parte principal do capítulo, que é o processo de otimização da consulta. O fluxograma com os estágios e fases da otimização facilita a compreensão do processo.

4. Exploring Query Execution Plans

Now (…) we can investigate an execution plan to examine the results of this process and begin analyzing how we can improve the performance of our queries.

Este é um capítulo looongo e que com certeza será lido, relido e relido… O capítulo explica como acessar o plano de execução, em suas várias formas de exibição, e também como navegar por ele. O item Query plan operators of interest explica o que são os operadores, os tipos principais e também alguns dos operadores de utilização mais frequente, iniciando pelos operadores de acesso aos dados (que são muitos); os de junção; e outros como os de agregação e de ordenação. Além dos operadores de uso mais comum, o capítulo também explica várias propriedades do plano de execução e também propriedades dos operadores.

5. Writing Elegant T-SQL Queries

There are a few guidelines that are important to keep in mind when writing T-SQL queries to ensure that they perform and scale well. For this purpose, this chapter discusses some basics of database physical design structure, such as indexes, as well as how the Query Optimizer estimates cost and chooses what data access methods must be used, based on how the query is written.

Acho que é a primeira vez que deparo com a expressão “consulta elegante em T-SQL”. Geralmente encontro termos como “eficiente”.

O capítulo inicia pelo assunto sargability. Opa! No Porto SQL tem o artigo Construindo códigos T-SQL eficientes, sobre o uso de predicados sargable. A seguir o texto traz uma introdução aos índices e finaliza com uma lista de “melhores práticas” na construção de consultas em T-SQL.

6. Easily-Identified T-SQL Anti-Patterns

(…) In this chapter, we will examine some common T-SQL patterns and anti-patterns, specifically those that should be easily identified just by looking at the T-SQL code.

Anti-Patterns?! Ainda estou à procura de uma tradução para esse termo e que não seja “anti-padrões”; alguma sugestão? Talvez “práticas ruins” ou “péssimos hábitos”.

O capítulo cita algumas práticas que devem ser evitadas, como “SELECT *”; uso de funções em predicados; uso de funções de usuário (exceto quando for do tipo inline TVF); uso de expressões complexas em predicados; comparações negadas (!=, <> etc); e outros casos.

7. Discovering T-SQL Anti-Patterns in Depth

Now we will move on to some anti-patterns that may require some more in-depth analysis to be identified. These often involve T-SQL that at first glance seems straightforward, but when we dig into the query plan, there may be hidden performance pitfalls, such as expensive operations or hidden practices that prevent predicate SARGability.

Pode-se dizer que este capítulo é continuação do assunto tratado no capítulo anterior, mas de casos mais complexos. Inicia pela conversão implícita; passa pelos casos em que o código sql força a utilização interna do operador SORT; os problemas de desempenho que o uso de funções UDF podem causar; visões complexas; subconsultas correlacionadas; etc.

8. Building Diagnostic Queries Using DMVs and DMFs

Dynamic Management Views (DMVs) and Dynamic Management Functions (DMFs) expose relevant real-time information that can unlock the secrets of T-SQL execution and SQL Server health, even on a live production server. In this chapter, we will start by enumerating some of the DMVs that are most relevant for both T-SQL developers and database administrators alike to troubleshoot T-SQL query performance.

A partir deste capítulo o texto do livro sofre mudança radical de conteúdo. Se os capítulos anteriores tratavam de programação T-SQL, a partir deste capítulo o assunto é monitoramento de processos para detecção de problemas ou melhoria de desempenho. Como citado no título e no lead do capítulo, o assunto são as visões (e funções) de gerenciamento dinâmico que são úteis no monitoramento e pesquisa de causas de problemas.

9. Building XEvent Profiler Traces

In this chapter, we will introduce Extended Events (XEvents), the lightweight infrastructure that exposes relevant just-in-time information from every component of SQL Server, focusing on those related to T-SQL execution.

Enquanto que as DMV e DMF fornecem um instântaneo da situação, os eventos estendidos permitem coletar dados ao longo de certo período para análise posterior. Se você quer saber o que são os eventos estendidos do SQL Server, e como utilizá-los, este é o texto que você procurava.

10. Comparative Analysis of Query Plans

Back in 2015, SSMS introduced rich-UI features to make query plan analysis easier. This chapter will introduce the query plan comparison and query plan analysis functionalities in SSMS, to help streamline the process of troubleshooting certain classes of issue with query performance.

O lead acima já disse tudo. O capítulo é extenso, com muitas ilustrações para facilitar a compreensão.

11. Tracking Performance History with Query Store

This chapter will introduce the Query Store, which is effectively a flight recorder for SQL Server T-SQL executions, allowing performance tracking over time and analysis of workload trends through rich UI reports that are included with SSMS.

O Query Store foi implantado na versão 2016 do SQL Server mas me parece que é um assunto ainda pouco citado em blogs técnicos de SQL Server. Aliás, o Fabrício Lima possui uma série sobre o assunto, que inicia em Query Store (#01) – Introdução.

O capítulo explica o que é o Query Store; como utilizá-lo para monitorar consultas demoradas ou que consomem muitos recursos; como corrigir consultas sql que se tornaram lentas (regression from parameter-sensitive plans). Aliás, o texto do capítulo trata o Query Store como “gravador de voo”.

12. Troubleshooting Live Queries

This chapter will introduce the Query Profiling Infrastructure that exposes real-time query execution plans, which enable scenarios such as production systems troubleshooting. 

Live Query Statistics (LQS) é ver o plano de execução … em execução! Antes do Management Studio (SSMS) 2016 somente tínhamos acesso ao plano de execução após a compilação ou então após a execução, quando são acrescentadas as métricas da execução. Entretanto, no SSMS lançado junto com o SQL Server 2016, e posteriormente tornado um produto de desenvolvimento independente do SQL Server, o recurso LQS permite analisar o plano de execução enquanto ele está em execução.

Sobre Query Profiling Infrastructure (QPI), não o conhecia e nem me recordo de ter lido a respeito antes. À medida que leio o capítulo, mesmo que superficialmente, me deparo com novos recursos implementados a partir do SQL Server 2016. O capítulo trata também do Activity Monitor.

13. Managing Optimizer Changes with the Query Tuning Assistant

Query Tuning Assistant (QTA) aims to address some of the most common causes of cardinality estimation related performance regressions that may affect our T-SQL queries after an upgrade from an older version of SQL Server to a newer version, namely SQL Server 2016 and above. (…)  the risk that after upgrading and leaping so many years and versions, a part of the application’s workload can experience performance regressions due to CE changes is very real.

E este capítulo volta a assunto já tratado em capítulos anteriores, estimativa de cardinalidade, e seu impacto nos planos de execução: The CE version that our databases use influences how query plans are calculated for queries that will execute in those databases.

Quem está às voltas com migração de SQL Server 2008 para versão mais recente (2016 em diante), e deparou com algumas consultas sql processando de forma mais lenta, pode encontrar neste capítulo explicações sobre possíveis causas e como corrigir o problema.

O capítulo explica em quais situações o QTA se aplica; os fundamentos do QTA; e como o QTA funciona internamente.

Finalizando…

Aproveite que a editora Packt disponibilizou a leitura online gratuita do livro para avaliar o conteúdo do livro e adquiri-lo, caso se interesse.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s