<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-32223696562979219</id><updated>2024-09-05T01:25:41.002-07:00</updated><category term="sql server"/><category term="sql server 2005"/><category term="Altiris services error"/><category term="DBA sql server"/><category term="DTA"/><category term="SQL tunning"/><category term="TSQL tunning"/><category term="achar informações de spid sql server"/><category term="alloc unit errors"/><category term="criar cursor microsoft sql server"/><category term="criar cursor no sql server"/><category term="cursor para monitoração"/><category term="db em single user"/><category term="dbcc"/><category term="dbcc checkdb"/><category term="dia a dia de um DBA sql"/><category term="falha em job sql server"/><category term="fetch logical page"/><category term="index"/><category term="index corrompido"/><category term="index tuning"/><category term="jobs falhando sql server"/><category term="jobs falhos"/><category term="matendo o sql server"/><category term="partition error"/><category term="problemas com index"/><category term="profiler"/><category term="programando tsql"/><category term="programar cursor tsql"/><category term="rebuild index"/><category term="script de validação no ambiente"/><category term="script util"/><category term="script útil"/><category term="scripts legais"/><category term="select erros"/><category term="sp_who"/><category term="sp_who2"/><category term="spid no sql"/><category term="sql 2005"/><category term="sql scritp"/><category term="sql server scripts"/><category term="sql server sp_who2"/><category term="sql server spid"/><category term="sql servr cursores"/><category term="sql sp_who"/><category term="trabalhando com sql server"/><category term="tratando erro no sql server"/><category term="tratando erros sql server"/><category term="tratar erros sql server"/><category term="tsql criar cursor"/><category term="tsql cursores"/><category term="tsql error handling"/><category term="tsql scripts"/><category term="tsql spid"/><category term="tsql tratamento de erros"/><category term="tunning"/><category term="ver jobs que falharam"/><title type='text'>Canal DBA - MS SQL Server Related</title><subtitle type='html'>This channel treats daily routine for MS SQL DBA&#39;s and also keeps thousands of articles in track. Feel free to share, comment, criticize and so on!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://canaldba.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32223696562979219/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://canaldba.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Canal DBA</name><uri>http://www.blogger.com/profile/11598950184411346339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_WLDr--ilaf4/SzBfQ54C8yI/AAAAAAAAAAM/JkdvCasuJ4M/S220/pc.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-32223696562979219.post-5615341689036920897</id><published>2011-02-08T12:26:00.000-08:00</published><updated>2011-02-08T12:31:39.476-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="alloc unit errors"/><category scheme="http://www.blogger.com/atom/ns#" term="Altiris services error"/><category scheme="http://www.blogger.com/atom/ns#" term="db em single user"/><category scheme="http://www.blogger.com/atom/ns#" term="dbcc"/><category scheme="http://www.blogger.com/atom/ns#" term="dbcc checkdb"/><category scheme="http://www.blogger.com/atom/ns#" term="fetch logical page"/><category scheme="http://www.blogger.com/atom/ns#" term="index corrompido"/><category scheme="http://www.blogger.com/atom/ns#" term="index tuning"/><category scheme="http://www.blogger.com/atom/ns#" term="partition error"/><category scheme="http://www.blogger.com/atom/ns#" term="problemas com index"/><category scheme="http://www.blogger.com/atom/ns#" term="rebuild index"/><category scheme="http://www.blogger.com/atom/ns#" term="select erros"/><title type='text'>Erros Com Tabelas:  spidxx Attempt to fetch logical page (1:2032) in database 5 failed. It belongs to allocation unit xxxxx.... not to xxxxx....</title><content type='html'>Primeiro conselho que dou é checar o banco de dados na qual as tabelas estão com um DBCC CHECKDB.&lt;br /&gt;
Os erros apresentados no output do DBCC são semelhantes aos demonstrados abaixo;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Msg 2533, Level 16, State 1, Line 1&lt;br /&gt;
Table error: page (1:540) allocated to&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt; object ID 325576198&lt;/span&gt;&lt;/b&gt;, index ID 1, partition ID 72057625823870976, alloc unit ID 72057625827803136 (type In-row data) was not seen. The page may be invalid or may have an incorrect alloc unit ID in its header.&lt;br /&gt;
&lt;br /&gt;
Msg 8976, Level 16, State 1, Line 1&lt;br /&gt;
Table error: &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;&lt;b&gt;Object ID 325576198&lt;/b&gt;&lt;/span&gt;, index ID 1, partition ID 72057625823870976, alloc unit ID 72057625827803136 (type In-row data). Page (1:540) was not seen in the scan although its parent (1:546) and previous (1:399) refer to it. Check any previous errors.&lt;br /&gt;
&lt;br /&gt;
Tendo os Object ID em mão fica fácil determinar onde os problemas estão, basta rodar a query abaixo;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SELECT * FROM sys.objects&lt;br /&gt;
WHERE object_ID in (&#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;&lt;b&gt;325576198&lt;/b&gt;&lt;/span&gt;&#39;) &amp;nbsp;-- Utilizo o IN aqui, pois podemos ter vários objetos com problemas&lt;br /&gt;
&lt;br /&gt;
Agora que temos os objetos / tabelas com problemas, vamos dar o &amp;nbsp;Fix neste problema.&lt;br /&gt;
&lt;br /&gt;
- Deixe o DB em Single_User&lt;br /&gt;
- Rode o Comando DBCC CHECKDB(nome_db,&amp;nbsp;repair_allow_data_loss)&lt;br /&gt;
- Volte o DB para Multi_User&lt;br /&gt;
&lt;br /&gt;
Isso irá resolver o seu problema de Fetch Logical Pages e também erros de&amp;nbsp;consistência&amp;nbsp;do DB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Abraços.</content><link rel='replies' type='application/atom+xml' href='http://canaldba.blogspot.com/feeds/5615341689036920897/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://canaldba.blogspot.com/2011/02/erros-com-tabelas-spidxx-attempt-to.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32223696562979219/posts/default/5615341689036920897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32223696562979219/posts/default/5615341689036920897'/><link rel='alternate' type='text/html' href='http://canaldba.blogspot.com/2011/02/erros-com-tabelas-spidxx-attempt-to.html' title='Erros Com Tabelas:  spidxx Attempt to fetch logical page (1:2032) in database 5 failed. It belongs to allocation unit xxxxx.... not to xxxxx....'/><author><name>Canal DBA</name><uri>http://www.blogger.com/profile/11598950184411346339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_WLDr--ilaf4/SzBfQ54C8yI/AAAAAAAAAAM/JkdvCasuJ4M/S220/pc.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32223696562979219.post-9135193323266363563</id><published>2010-11-06T09:20:00.000-07:00</published><updated>2010-12-28T20:49:43.897-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="achar informações de spid sql server"/><category scheme="http://www.blogger.com/atom/ns#" term="script util"/><category scheme="http://www.blogger.com/atom/ns#" term="sp_who"/><category scheme="http://www.blogger.com/atom/ns#" term="sp_who2"/><category scheme="http://www.blogger.com/atom/ns#" term="spid no sql"/><category scheme="http://www.blogger.com/atom/ns#" term="sql scritp"/><category scheme="http://www.blogger.com/atom/ns#" term="sql server 2005"/><category scheme="http://www.blogger.com/atom/ns#" term="sql server sp_who2"/><category scheme="http://www.blogger.com/atom/ns#" term="sql server spid"/><category scheme="http://www.blogger.com/atom/ns#" term="sql sp_who"/><category scheme="http://www.blogger.com/atom/ns#" term="tsql spid"/><title type='text'>Obtendo informações dos SPIDs no pool</title><content type='html'>Resolvi postar aqui uma série de scripts para trabalhar com SPIDs logados no SQL Server:&lt;br /&gt;&lt;br /&gt;-----------------------------------------------&lt;br /&gt;-- Ver situação do seu SPID atual&lt;br /&gt;SELECT * FROM master.dbo.sysprocesses&lt;br /&gt;WHERE spid = (SELECT CAST(@@spid AS CHAR(10)))&lt;br /&gt;-----------------------------------------------&lt;br /&gt;&lt;br /&gt;-----------------------------------------------&lt;br /&gt;-- Ver situação de certo SPID&lt;br /&gt;DECLARE @spid AS INT&lt;br /&gt;SET @spid = 1 -- Mudar este valor&lt;br /&gt;&lt;br /&gt;SELECT * FROM master.dbo.sysprocesses&lt;br /&gt;WHERE spid = @spid&lt;br /&gt;-----------------------------------------------&lt;br /&gt;&lt;br /&gt;-----------------------------------------------&lt;br /&gt;-- Ver qual o Login Name do seu SPID&lt;br /&gt;SELECT spid, loginame FROM master.dbo.sysprocesses&lt;br /&gt;WHERE spid = (SELECT CAST(@@spid AS CHAR(10)))&lt;br /&gt;-----------------------------------------------&lt;br /&gt;&lt;br /&gt;-----------------------------------------------&lt;br /&gt;-- Ver qual o Login Name de certo SPID&lt;br /&gt;DECLARE @spid AS INT&lt;br /&gt;SET @spid = 1&lt;br /&gt;&lt;br /&gt;SELECT spid, loginame FROM master.dbo.sysprocesses&lt;br /&gt;WHERE spid = @spid&lt;br /&gt;-----------------------------------------------&lt;br /&gt;&lt;br /&gt;Abraço.</content><link rel='replies' type='application/atom+xml' href='http://canaldba.blogspot.com/feeds/9135193323266363563/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://canaldba.blogspot.com/2010/11/obtendo-informacoes-dos-spids-no-pool.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32223696562979219/posts/default/9135193323266363563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32223696562979219/posts/default/9135193323266363563'/><link rel='alternate' type='text/html' href='http://canaldba.blogspot.com/2010/11/obtendo-informacoes-dos-spids-no-pool.html' title='Obtendo informações dos SPIDs no pool'/><author><name>Canal DBA</name><uri>http://www.blogger.com/profile/11598950184411346339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_WLDr--ilaf4/SzBfQ54C8yI/AAAAAAAAAAM/JkdvCasuJ4M/S220/pc.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32223696562979219.post-2031275212249497958</id><published>2010-11-06T09:13:00.000-07:00</published><updated>2010-12-28T20:54:18.878-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="programando tsql"/><category scheme="http://www.blogger.com/atom/ns#" term="tratando erro no sql server"/><category scheme="http://www.blogger.com/atom/ns#" term="tratando erros sql server"/><category scheme="http://www.blogger.com/atom/ns#" term="tratar erros sql server"/><category scheme="http://www.blogger.com/atom/ns#" term="tsql error handling"/><category scheme="http://www.blogger.com/atom/ns#" term="tsql tratamento de erros"/><title type='text'>Error Handling no SQL Server</title><content type='html'>Trabalhar com programação em T-SQL ficou ainda melhor com Error Handling, podemos dar direções diferentes dependendo do que está acontencendo em nosso código; podemos trabalhar com testes de ambiente etc com essa &quot;nova maravilha&quot; do SQL Server;&lt;br /&gt;&lt;br /&gt;Abaixo está um script completo com minhas anotações sobre Error Handling:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- Cria uma tabela para teste&lt;br /&gt;CREATE TABLE mytable&lt;br /&gt;( ID    INT        NOT NULL PRIMARY KEY)&lt;br /&gt;&lt;br /&gt;-- Inicia uma transação e não trata o erro&lt;br /&gt;-- repare que somente um registro não será inserido&lt;br /&gt;-- na tabela, pois estamos dando commmit na transação&lt;br /&gt;-- e não tratando erros&lt;br /&gt;BEGIN TRAN&lt;br /&gt;INSERT mytable VALUES (1)&lt;br /&gt;INSERT mytable VALUES (1)&lt;br /&gt;INSERT mytable VALUES (2)&lt;br /&gt;COMMIT TRAN&lt;br /&gt;&lt;br /&gt;SELECT * FROM mytable    -- Seleciona os registros da tabela&lt;br /&gt;TRUNCATE TABLE mytable    -- Deleta todos os dados da tabela&lt;br /&gt;&lt;br /&gt;--// -------------------------------&lt;br /&gt;&lt;br /&gt;-- Após configurar a função XACT_ABORT para ON&lt;br /&gt;-- o sql passará a fazer rollback de toda a transação dentro&lt;br /&gt;-- do bloco de transação&lt;br /&gt;SET XACT_ABORT ON&lt;br /&gt;GO&lt;br /&gt;BEGIN TRAN&lt;br /&gt;INSERT mytable VALUES (3)&lt;br /&gt;INSERT mytable VALUES (3)&lt;br /&gt;INSERT mytable VALUES (4)&lt;br /&gt;COMMIT TRAN&lt;br /&gt;GO&lt;br /&gt;SET XACT_ABORT OFF&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;SELECT * FROM mytable    -- Seleciona os registros da tabela&lt;br /&gt;TRUNCATE TABLE mytable    -- Deleta todos os dados da tabela&lt;br /&gt;--// -------------------------------&lt;br /&gt;&lt;br /&gt;-- Com o bloco de tratamento de erros é possível&lt;br /&gt;-- direcionar o fluxo para o rollback da transação em&lt;br /&gt;-- vez de tentar comitar as transações corretas.&lt;br /&gt;-- Isto faz com que todo o conteúdo da transação seja desfeito&lt;br /&gt;BEGIN TRY&lt;br /&gt;BEGIN TRAN&lt;br /&gt;    INSERT mytable VALUES(1)&lt;br /&gt;    INSERT mytable VALUES(1)&lt;br /&gt;    INSERT mytable VALUES(2)&lt;br /&gt;COMMIT TRAN&lt;br /&gt;END TRY&lt;br /&gt;BEGIN CATCH&lt;br /&gt;ROLLBACK TRAN&lt;br /&gt;PRINT &#39;A Transação Não Foi Comitada no Banco&#39;&lt;br /&gt;END CATCH&lt;br /&gt;&lt;br /&gt;SELECT * FROM mytable    -- Seleciona os registros da tabela&lt;br /&gt;TRUNCATE TABLE mytable    -- Deleta todos os dados da tabela&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(basta copiar e colar no SQL Server para ter um código mais legível)&lt;br /&gt;&lt;br /&gt;Abraço.</content><link rel='replies' type='application/atom+xml' href='http://canaldba.blogspot.com/feeds/2031275212249497958/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://canaldba.blogspot.com/2010/11/error-handling-no-sql-server.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32223696562979219/posts/default/2031275212249497958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32223696562979219/posts/default/2031275212249497958'/><link rel='alternate' type='text/html' href='http://canaldba.blogspot.com/2010/11/error-handling-no-sql-server.html' title='Error Handling no SQL Server'/><author><name>Canal DBA</name><uri>http://www.blogger.com/profile/11598950184411346339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_WLDr--ilaf4/SzBfQ54C8yI/AAAAAAAAAAM/JkdvCasuJ4M/S220/pc.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32223696562979219.post-7583024692351571548</id><published>2010-11-06T09:05:00.000-07:00</published><updated>2010-12-28T20:55:35.605-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="falha em job sql server"/><category scheme="http://www.blogger.com/atom/ns#" term="jobs falhando sql server"/><category scheme="http://www.blogger.com/atom/ns#" term="jobs falhos"/><category scheme="http://www.blogger.com/atom/ns#" term="script de validação no ambiente"/><category scheme="http://www.blogger.com/atom/ns#" term="ver jobs que falharam"/><title type='text'>Lista de JOBs que falharam no seu ambiente</title><content type='html'>O que fazer pra saber quais foram os últimos jobs que tiveram falhas no seu ambiente?&lt;br /&gt;Abaixo postei uma query para simplificar o trabalho de caça aos jobs falhando :)&lt;br /&gt;&lt;br /&gt;Como já postei o arquivo em outros sites da internet, vou deixar padrão aqui no meu blog:&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------&lt;br /&gt;/*&lt;br /&gt;&lt;br /&gt;Created by - Marcos Rosa&lt;br /&gt;&lt;br /&gt;The following select uses the three below tables&lt;br /&gt;from msdb&lt;br /&gt;&lt;br /&gt;syscategories:        Shows all possible categories&lt;br /&gt;sysjobs:            Shows all jobs within the instance&lt;br /&gt;sysjobservers:        Shows information for runtime of all jobs&lt;br /&gt;&lt;br /&gt;The outcomes information for success or failure of a job is:&lt;br /&gt;0 = Failed&lt;br /&gt;1 = Succeeded&lt;br /&gt;3 = Canceled&lt;br /&gt;5 = Unknown&lt;br /&gt;&lt;br /&gt;I used my own aliases to create and label fields feel free to change it at&lt;br /&gt;any time you feel it is reqired.&lt;br /&gt;&lt;br /&gt;*/&lt;br /&gt;--------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;USE MSDB&lt;br /&gt;&lt;br /&gt;  SELECT tb.Name, tb.Enabled, tb.Description, tb3.name as Category&lt;br /&gt;       , Job_Status =&lt;br /&gt;          CASE last_run_outcome&lt;br /&gt;          WHEN 0 THEN &#39;Failed&#39;&lt;br /&gt;          WHEN 1 THEN &#39;Succeeded&#39;&lt;br /&gt;          WHEN 3 THEN &#39;Canceled&#39;&lt;br /&gt;          WHEN 5 THEN &#39;Unknown&#39;&lt;br /&gt;          ELSE &#39;Not for sale&#39;&lt;br /&gt;          END    , tb2.last_outcome_message as Output_Message     &lt;br /&gt;  FROM sysjobs as tb, sysjobservers as tb2, syscategories as tb3&lt;br /&gt;  WHERE tb.job_id = tb2.job_id and tb.category_id = tb3.category_id&lt;br /&gt;  ORDER BY last_run_outcome&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Espero que gostem, se tiverem mais informações úteis para a query e estiverem afim de compartilhar, enviem uma nota.&lt;br /&gt;&lt;br /&gt;Obrigado e Abraço.</content><link rel='replies' type='application/atom+xml' href='http://canaldba.blogspot.com/feeds/7583024692351571548/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://canaldba.blogspot.com/2010/11/o-que-fazer-pra-saber-quais-foram-os.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32223696562979219/posts/default/7583024692351571548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32223696562979219/posts/default/7583024692351571548'/><link rel='alternate' type='text/html' href='http://canaldba.blogspot.com/2010/11/o-que-fazer-pra-saber-quais-foram-os.html' title='Lista de JOBs que falharam no seu ambiente'/><author><name>Canal DBA</name><uri>http://www.blogger.com/profile/11598950184411346339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_WLDr--ilaf4/SzBfQ54C8yI/AAAAAAAAAAM/JkdvCasuJ4M/S220/pc.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32223696562979219.post-7849717031414054397</id><published>2010-11-06T08:53:00.000-07:00</published><updated>2010-12-28T20:56:48.907-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="criar cursor microsoft sql server"/><category scheme="http://www.blogger.com/atom/ns#" term="criar cursor no sql server"/><category scheme="http://www.blogger.com/atom/ns#" term="cursor para monitoração"/><category scheme="http://www.blogger.com/atom/ns#" term="programar cursor tsql"/><category scheme="http://www.blogger.com/atom/ns#" term="sql server"/><category scheme="http://www.blogger.com/atom/ns#" term="sql servr cursores"/><category scheme="http://www.blogger.com/atom/ns#" term="tsql criar cursor"/><category scheme="http://www.blogger.com/atom/ns#" term="tsql cursores"/><title type='text'>Criando e Trabalhando com CURSOR</title><content type='html'>Poucos dias atrás trabalhei com cursor; resolvi então postar aqui um script rápido para você basear seus cursores caso necessário:&lt;br /&gt;&lt;br /&gt;Se por exemplo eu quero mostrar todos os nomes contendo Marcos e seus endereços&lt;br /&gt;da minha tabela chamada tabela_funcionarios; Lógicamente se eu tiver que fazer isso na vida real eu escreverei a seguinte Query:&lt;br /&gt;&lt;br /&gt;SELECT Nome, Endereco&lt;br /&gt;FROM tabela_funcionarios&lt;br /&gt;WHERE Nome  = &#39;Marcos&#39;&lt;br /&gt;&lt;br /&gt;Mas para mostrar como podemos criar um cursor, segue o script abaixo:&lt;br /&gt;&lt;br /&gt;DECLARE @Nome char(10)&lt;br /&gt;    ,@Endereco char(20)&lt;br /&gt;&lt;br /&gt;DECLARE cursor_regs CURSOR FOR&lt;br /&gt; SELECT * FROM tabela_funcionarios&lt;br /&gt;FOR READ ONLY&lt;br /&gt;&lt;br /&gt;OPEN cursor_regs&lt;br /&gt;&lt;br /&gt;FETCH cursor_regs INTO @Nome, @Endereco&lt;br /&gt;&lt;br /&gt;WHILE  @@FETCH_STATUS = 0&lt;br /&gt; BEGIN&lt;br /&gt; &lt;br /&gt;     IF @Nome = &#39;Marcos&#39;&lt;br /&gt;         PRINT @Nome + &#39; &#39; + @Endereco&lt;br /&gt;     ELSE&lt;br /&gt;         PRINT &#39;Nome Comum&#39;&lt;br /&gt;     FETCH cursor_regs INTO @Nome, @Endereco&lt;br /&gt; END&lt;br /&gt;&lt;br /&gt;CLOSE cursor_regs&lt;br /&gt;DEALLOCATE cursor_regs&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pessoal, tomem muito cuidado quando trabalhar com cursor, atens validem se não existem formas diferentes que sejam menos custosas para o servidor. No caso do nosso exemplo a utilização do cursor foi somente para fins de demonstração, pois está totalmente fora de conceito fazer essa simples query com cursor!&lt;br /&gt;&lt;br /&gt;Abraços.</content><link rel='replies' type='application/atom+xml' href='http://canaldba.blogspot.com/feeds/7849717031414054397/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://canaldba.blogspot.com/2010/11/poucos-dias-atras-trabalhei-com-cursor.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32223696562979219/posts/default/7849717031414054397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32223696562979219/posts/default/7849717031414054397'/><link rel='alternate' type='text/html' href='http://canaldba.blogspot.com/2010/11/poucos-dias-atras-trabalhei-com-cursor.html' title='Criando e Trabalhando com CURSOR'/><author><name>Canal DBA</name><uri>http://www.blogger.com/profile/11598950184411346339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_WLDr--ilaf4/SzBfQ54C8yI/AAAAAAAAAAM/JkdvCasuJ4M/S220/pc.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32223696562979219.post-6940364519371249220</id><published>2010-10-11T21:41:00.000-07:00</published><updated>2010-12-28T20:57:38.754-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DBA sql server"/><category scheme="http://www.blogger.com/atom/ns#" term="dia a dia de um DBA sql"/><category scheme="http://www.blogger.com/atom/ns#" term="matendo o sql server"/><category scheme="http://www.blogger.com/atom/ns#" term="script útil"/><category scheme="http://www.blogger.com/atom/ns#" term="scripts legais"/><category scheme="http://www.blogger.com/atom/ns#" term="sql server scripts"/><category scheme="http://www.blogger.com/atom/ns#" term="trabalhando com sql server"/><category scheme="http://www.blogger.com/atom/ns#" term="tsql scripts"/><title type='text'>T-SQL Scripts para o Dia Dia</title><content type='html'>Olá pessoal,&lt;br /&gt;&lt;br /&gt;Devo desculpas pelo tempo que fiquei sem dar as caras no blog e dever vários posts, mas é que estou um tanto atarefado e isto impactou diretamento n omeu rendimento quanto ao blog.&lt;br /&gt;&lt;br /&gt;Bom hoje passo rápidamente dois scrips para o dia dia do DBA; Uma das nossas funções como DBA é garantir que nosso ambiente esteja 100% seguro quando falamos de backups. Para isto temos um script básico e facilitador que se pensarmos em conjunto com as funcionalidades de tasks do windows ou até mesmo criar um job com  o script,&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SELECT @@SERVERNAME&lt;br /&gt;PRINT &#39;------------------&lt;br /&gt;&#39;&lt;br /&gt;SELECT substring(d.name,1,50) as dbname,&lt;br /&gt;     CASE b.type&lt;br /&gt;            WHEN &#39;D&#39; THEN &#39;BACKUP FULL&#39;&lt;br /&gt;             WHEN &#39;I&#39; THEN &#39;BACKUP DIFFERENCIAL&#39;&lt;br /&gt;             WHEN &#39;L&#39; THEN &#39;LOG&#39;&lt;br /&gt;             WHEN &#39;F&#39; THEN &#39;FILE OR FILEGROUP&#39;&lt;br /&gt;         ELSE &#39;NO BACKUP&#39;&lt;br /&gt;     END as TYPE&lt;br /&gt;   ,max(b.backup_start_date) as backup_date&lt;br /&gt;FROM master..sysdatabases d LEFT JOIN msdb..backupset b&lt;br /&gt; ON d.name = b.database_name&lt;br /&gt;WHERE d.name not in (&#39;model&#39;,&#39;tempdb&#39;)&lt;br /&gt;   --  AND b.backup_start_date is null&lt;br /&gt;    GROUP BY d.name, type order by d.name&lt;br /&gt;&lt;br /&gt;Na clausula WHERE, na linha comentada, podemos utilizá-la para buscar somente databases sem quaisquer backups ou sem informações de backups.&lt;br /&gt;&lt;br /&gt;Quaisquer dúvidas, post sua mensagem que eu responderei assim que puder.&lt;br /&gt;&lt;br /&gt;Abraços.</content><link rel='replies' type='application/atom+xml' href='http://canaldba.blogspot.com/feeds/6940364519371249220/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://canaldba.blogspot.com/2010/10/t-sql-scripts-para-o-dia-dia.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32223696562979219/posts/default/6940364519371249220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32223696562979219/posts/default/6940364519371249220'/><link rel='alternate' type='text/html' href='http://canaldba.blogspot.com/2010/10/t-sql-scripts-para-o-dia-dia.html' title='T-SQL Scripts para o Dia Dia'/><author><name>Canal DBA</name><uri>http://www.blogger.com/profile/11598950184411346339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_WLDr--ilaf4/SzBfQ54C8yI/AAAAAAAAAAM/JkdvCasuJ4M/S220/pc.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32223696562979219.post-6550365257229549303</id><published>2009-12-21T22:13:00.000-08:00</published><updated>2009-12-21T22:32:17.389-08:00</updated><title type='text'>LIsta de Imagens para o Post Tuning Índex com DTA</title><content type='html'>&lt;div&gt;&lt;/div&gt;&lt;div&gt;Este post é complemento do último post sobre Tuning Índex com o DTA;&lt;/div&gt;&lt;div&gt;Aqui você encontra a lista das imagens referenciadas no post.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Figura 1. Acessando o Profiler de dentro do SSMS&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi02zBRnsET9sdBhdQ6CT3hZ9z7ZQc_37U-6gIYktty8Sw2lffLQml8djjd14_rr4qBvRzb0JXBI5KR2pby1BgLrLObVMVNF1rKTjqaUL_QqWn_FKsJe7TNwKz2Y5Jl1BMsSC9IUmXpDA/s1600-h/fig1.bmp&quot;&gt;&lt;img id=&quot;BLOGGER_PHOTO_ID_5417940070940080690&quot; style=&quot;WIDTH: 320px; CURSOR: hand; HEIGHT: 82px&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi02zBRnsET9sdBhdQ6CT3hZ9z7ZQc_37U-6gIYktty8Sw2lffLQml8djjd14_rr4qBvRzb0JXBI5KR2pby1BgLrLObVMVNF1rKTjqaUL_QqWn_FKsJe7TNwKz2Y5Jl1BMsSC9IUmXpDA/s320/fig1.bmp&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Figura 2. Configurando a tela do trace&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghhKumhPZrAi1WWsi6OFhrfJztXyzrNiNv0q1zXNm_6H2xMENzjL7h_QBKVl_KbdWTheBA43Vc-LQQcoZ9AV802qtkXHs-YvGl-wBfAIrVzL3l4gDTpYIa402XK37wcsyyEvd5gtv4fQ/s1600-h/fig2.bmp&quot;&gt;&lt;img id=&quot;BLOGGER_PHOTO_ID_5417940218155506530&quot; style=&quot;WIDTH: 320px; CURSOR: hand; HEIGHT: 202px&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghhKumhPZrAi1WWsi6OFhrfJztXyzrNiNv0q1zXNm_6H2xMENzjL7h_QBKVl_KbdWTheBA43Vc-LQQcoZ9AV802qtkXHs-YvGl-wBfAIrVzL3l4gDTpYIa402XK37wcsyyEvd5gtv4fQ/s320/fig2.bmp&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Figura 3. Tela Configurada Para Realização do Trace&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEior2yBy9pHCe4UY727dtkzs8A06YbWn9Y48FWfCYSvKHTf24fAG9iqVHk3ExCSAV2UxUuAXY3vyb5ici9pQ1YFmBhTStUdQAZa23OtJusW_wM2mnalx9_XDHKwqQWocRCSQn0oCRGWfg/s1600-h/fig3.bmp&quot;&gt;&lt;img id=&quot;BLOGGER_PHOTO_ID_5417940815365618690&quot; style=&quot;WIDTH: 320px; CURSOR: hand; HEIGHT: 198px&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEior2yBy9pHCe4UY727dtkzs8A06YbWn9Y48FWfCYSvKHTf24fAG9iqVHk3ExCSAV2UxUuAXY3vyb5ici9pQ1YFmBhTStUdQAZa23OtJusW_wM2mnalx9_XDHKwqQWocRCSQn0oCRGWfg/s320/fig3.bmp&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Figura 4. Outras Opções de Trace e detalhamento de notificações para cada evento.&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJQcBYyY9wSxqkVvkYxJnmwsGnzr5y0daMpiCY8IIVksUgrwcQfvTSYZaE7l7FlxWaj7F0bOuCSqmi-wLHnMFoWAaOktrS-mWwqDuRiL-p88KH5Z0CXhv4WELbduVFoog0-8KYSIS-NA/s1600-h/fig4.bmp&quot;&gt;&lt;img id=&quot;BLOGGER_PHOTO_ID_5417941051542746434&quot; style=&quot;WIDTH: 320px; CURSOR: hand; HEIGHT: 201px&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJQcBYyY9wSxqkVvkYxJnmwsGnzr5y0daMpiCY8IIVksUgrwcQfvTSYZaE7l7FlxWaj7F0bOuCSqmi-wLHnMFoWAaOktrS-mWwqDuRiL-p88KH5Z0CXhv4WELbduVFoog0-8KYSIS-NA/s320/fig4.bmp&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Figura 5. T-SQL consultando um valor pelo índex e uma consulta DML incrementando o índex.&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyENZ0uR48F0HEi2CAZo1OkOQ0lYjDJ4m-Y0ZJ4SZ4Hu0tqKtfDqiukDb01tlQBVKEB0nbMiB6h6yOb_MUWbVizpl_xRDdL7pT5wrdECMSc7L2IKqSY876enQIXgUwp3mUhyphenhypheni5zNA1eQ/s1600-h/fig5.bmp&quot;&gt;&lt;img id=&quot;BLOGGER_PHOTO_ID_5417941404662501378&quot; style=&quot;WIDTH: 320px; CURSOR: hand; HEIGHT: 131px&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyENZ0uR48F0HEi2CAZo1OkOQ0lYjDJ4m-Y0ZJ4SZ4Hu0tqKtfDqiukDb01tlQBVKEB0nbMiB6h6yOb_MUWbVizpl_xRDdL7pT5wrdECMSc7L2IKqSY876enQIXgUwp3mUhyphenhypheni5zNA1eQ/s320/fig5.bmp&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Figura 6. Representação do DTA realizando uma otimização de uma TSQL.&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKx6qLQ_LQ1krtxOoHkwv-oD3IAzSATzmNzyJQlvXarnQPxngsE3vSYnf3VetXPYCfPx-hc172hnHo0fXl2tTQC7zyErd6jaj53wIEJLDADgbjHWxPo3YpQKsgpcSgB3tXn3pGWkjGHw/s1600-h/fig6.bmp&quot;&gt;&lt;img id=&quot;BLOGGER_PHOTO_ID_5417944291700699778&quot; style=&quot;WIDTH: 320px; CURSOR: hand; HEIGHT: 182px&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKx6qLQ_LQ1krtxOoHkwv-oD3IAzSATzmNzyJQlvXarnQPxngsE3vSYnf3VetXPYCfPx-hc172hnHo0fXl2tTQC7zyErd6jaj53wIEJLDADgbjHWxPo3YpQKsgpcSgB3tXn3pGWkjGHw/s320/fig6.bmp&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;div&gt;Figura 7. Abrindo o DTA (O DTA também pode ser aberto através do SSMS).&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi78NEDojucIPDTPkGDhtJKNDMFOpyrC20j78Wgzh-lAC5qlCTn2MUk7EI88rJFWcyRZNubC1dPg8jLIuIp2f5b3kFTrtAvR0gSXuhv5rrgSAj-D2cpIPSYVqydrj0i8UOJgoZjuDOj4w/s1600-h/fig7.bmp&quot;&gt;&lt;img id=&quot;BLOGGER_PHOTO_ID_5417942139201121986&quot; style=&quot;WIDTH: 320px; CURSOR: hand; HEIGHT: 57px&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi78NEDojucIPDTPkGDhtJKNDMFOpyrC20j78Wgzh-lAC5qlCTn2MUk7EI88rJFWcyRZNubC1dPg8jLIuIp2f5b3kFTrtAvR0gSXuhv5rrgSAj-D2cpIPSYVqydrj0i8UOJgoZjuDOj4w/s320/fig7.bmp&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Figura 8. Configurando a tela “General” do DTA.&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5N9O_7H1-53hJCd_MIFGKClhlhXErzdeGKjL8M2mkF2lcj8GcuLsmJSAp2tOWTf9xo0Plv-SW9pzzPrzGEuNL74XaHcx5mJahyphenhyphen_dpsu7MBHMT6pBI4j4JDreCQbl8HeaVJSdHc9Wrbg/s1600-h/fig8.bmp&quot;&gt;&lt;img id=&quot;BLOGGER_PHOTO_ID_5417942610698126130&quot; style=&quot;WIDTH: 320px; CURSOR: hand; HEIGHT: 188px&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5N9O_7H1-53hJCd_MIFGKClhlhXErzdeGKjL8M2mkF2lcj8GcuLsmJSAp2tOWTf9xo0Plv-SW9pzzPrzGEuNL74XaHcx5mJahyphenhyphen_dpsu7MBHMT6pBI4j4JDreCQbl8HeaVJSdHc9Wrbg/s320/fig8.bmp&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt; &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Figura 9. Configurando as opções do tuning.&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiTdAk9A8Im1hbOjh6DzO9rV2R3f-Gum8rabhegg2TWk8ancZegbCg9BJ9WVCYqv6ak4N5POxefajJj-TiLRHJ9iFgnKbMoZBlVcK8O5_AM-iXClUyooSlNboRsqgwe6dH9rOIg7tf2A/s1600-h/fig9.bmp&quot;&gt;&lt;img id=&quot;BLOGGER_PHOTO_ID_5417943020387266594&quot; style=&quot;WIDTH: 320px; CURSOR: hand; HEIGHT: 206px&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiTdAk9A8Im1hbOjh6DzO9rV2R3f-Gum8rabhegg2TWk8ancZegbCg9BJ9WVCYqv6ak4N5POxefajJj-TiLRHJ9iFgnKbMoZBlVcK8O5_AM-iXClUyooSlNboRsqgwe6dH9rOIg7tf2A/s320/fig9.bmp&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Figura 10. Utilizando os scripts para melhoria de desempenho das queries. &lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4owzgwXPyVeWv7-6youm4ixgTWBR81LxIGgAe3hAL7VHmioxXeUSwtQ8xE6yrQhmUZI3_Mp1CG5SXqK6nDDa34hca-dHjy5aAvoQeel2-sJj07zGncRKqnuj1OnXfUHem8qjPgRDI_A/s1600-h/fig10.bmp&quot;&gt;&lt;img id=&quot;BLOGGER_PHOTO_ID_5417943596031915458&quot; style=&quot;WIDTH: 320px; CURSOR: hand; HEIGHT: 214px&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4owzgwXPyVeWv7-6youm4ixgTWBR81LxIGgAe3hAL7VHmioxXeUSwtQ8xE6yrQhmUZI3_Mp1CG5SXqK6nDDa34hca-dHjy5aAvoQeel2-sJj07zGncRKqnuj1OnXfUHem8qjPgRDI_A/s320/fig10.bmp&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://canaldba.blogspot.com/feeds/6550365257229549303/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://canaldba.blogspot.com/2009/12/lista-de-imagens-para-o-post-tuning.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32223696562979219/posts/default/6550365257229549303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32223696562979219/posts/default/6550365257229549303'/><link rel='alternate' type='text/html' href='http://canaldba.blogspot.com/2009/12/lista-de-imagens-para-o-post-tuning.html' title='LIsta de Imagens para o Post Tuning Índex com DTA'/><author><name>Canal DBA</name><uri>http://www.blogger.com/profile/11598950184411346339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_WLDr--ilaf4/SzBfQ54C8yI/AAAAAAAAAAM/JkdvCasuJ4M/S220/pc.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi02zBRnsET9sdBhdQ6CT3hZ9z7ZQc_37U-6gIYktty8Sw2lffLQml8djjd14_rr4qBvRzb0JXBI5KR2pby1BgLrLObVMVNF1rKTjqaUL_QqWn_FKsJe7TNwKz2Y5Jl1BMsSC9IUmXpDA/s72-c/fig1.bmp" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32223696562979219.post-2078665736362066825</id><published>2009-12-21T21:55:00.000-08:00</published><updated>2009-12-21T22:09:57.160-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DTA"/><category scheme="http://www.blogger.com/atom/ns#" term="index"/><category scheme="http://www.blogger.com/atom/ns#" term="profiler"/><category scheme="http://www.blogger.com/atom/ns#" term="sql 2005"/><category scheme="http://www.blogger.com/atom/ns#" term="sql server"/><category scheme="http://www.blogger.com/atom/ns#" term="sql server 2005"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL tunning"/><category scheme="http://www.blogger.com/atom/ns#" term="TSQL tunning"/><category scheme="http://www.blogger.com/atom/ns#" term="tunning"/><title type='text'>Tuning Índex com o DTA</title><content type='html'>[Obs: Todas as Imagens estão em um post posterior a este]&lt;br /&gt;&lt;br /&gt;Tuning Índex com o DTA&lt;br /&gt;Turbine seus índices utilizando ferramentas de desempenho do SQL Server 2005 e novas idéias&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Marcos Leandro Rosa&lt;br /&gt;&lt;a href=&quot;mailto:marcosfac@gmail.com&quot;&gt;marcosfac@gmail.com&lt;/a&gt;&lt;br /&gt;Atualmente trabalha na IBM como DBA SQL Server em projetos internacionais. Atuou mais de 5 anos na área de desenvolvimento de aplicações comerciais nas linguagens Delphi, VB6/VBA, Ajax, Javascript entre outras; desenvolvimento de banco de dados SQL Server 2000 e 2005, graduando em sistemas de informação e certificado em MCTS SQL Server 2005.&lt;br /&gt;&lt;br /&gt;Este artigo foca a utilização do DTA (DataBase Engine Tuning Advisor) como a ferramenta principal para tuning de indexes criados em tabelas dentro de uma base de dados. Mas antes de iniciar a leitura sobre o DTA, é crucial que todos tenham em mente o quanto a informação foi valorizada nos tempos atuais, e, como se tornou vital para estratégias empresariais. Para se ter uma noção exata do quanto a informação foi valorizada nos últimos tempos, basta voltar pouco antes dos anos 50, quando empresas dependiam de muitas pessoas trabalhando no armazenamento de documentos em papéis, e comparar com os dias atuais.&lt;br /&gt;Da mesma maneira que tudo se evoluiu, os problemas e a complexidade das coisas também evoluíram e para tanto, renovação e readaptação são duas palavras constantes na vida de todo profissional de TI; Nós como DBA’s temos que estar aptos a conhecer novas formas de trabalhar todos os dias, e é em função disto que este artigo foi escrito.&lt;br /&gt;&lt;br /&gt;Como o artigo foca o tuning de base de dados e indica a criação de índices como um primeiro passo para o ganho de performance, vamos primeiramente conhecer o Profiler do SQL Server 2005 para, somente depois, iniciarmos o tuning de uma base.&lt;br /&gt;&lt;br /&gt;Entendendo o Profiler do SQL Server 2005&lt;br /&gt;&lt;br /&gt;Utilizamos o Profiler quando queremos ver todas as transações que estão ocorrendo dentro de uma determinada base de dados. O artigo foca a utilização do profiler nesta tarefa, pois é uma ferramenta prática de se trabalhar e que nos poupa muito trabalho.&lt;br /&gt;No dia-a-dia, ao analisar a performance de uma base, é possível se deparar com muitos fatores que influenciam na agilidade do nosso banco, por exemplo; Falta de index em consultas, Consultas que não utilizam índices, Hardware, Rede entre outros. Com o Profiler, tudo isso pode ser percebido com passos bastante simples.&lt;br /&gt;O Profiler é uma ferramenta gráfica instalada junto com o SQL Server (neste caso com o 2005) que possibilita capturarmos informações tais como:&lt;br /&gt;1- Login ou logout de um usuário na base de dados;&lt;br /&gt;2- RPC completadas – Indica que a chamada a uma stored procedure remota foi completada;&lt;br /&gt;3- T-SQL batch iniciado e completado – Indica que um batch de comandos T-SQL foi completado ou está iniciando;&lt;br /&gt;4- Conexões existentes – Demonstra conexões existentes assim que o trace é iniciado.&lt;br /&gt;&lt;br /&gt;Como o objetivo deste artigo não é ensinar a trabalhar com o profiler, mas sim com o DTA, vamos apenas conhecer como abrir, executar um trace simples e salvar este trace em arquivo. Para isso, no SQL Server Management Studio (SSMS), abra o Profiler acessando o menu Tools à SQL Server Profiler (veja aFigura 1).&lt;br /&gt;&lt;br /&gt;Figura 1. Acessando o Profiler de dentro do SSMS&lt;br /&gt;&lt;br /&gt;Ao abrir a tela do Profiler, é importante conhecer o nome do servidor que você está querendo acessar, pois somente assim será possível a criação de um novo trace. Agora, para criar um novo trace, acesse o menu File à New Trace e depois conecte-se ao servidor onde você deseja que o trace seja executado.&lt;br /&gt;Quando a conexão for estabelecida, a janela que será mostrada na tela (Figura 2) deverá ser configurada.&lt;br /&gt;&lt;br /&gt;Figura 2. Configurando a tela do trace&lt;br /&gt;&lt;br /&gt;No campo denominado Trace name coloque o nome do trace, neste exemplo foi utilizado “ExSQLMagazine”, mas este nome pode ser de sua preferência, desde que seja um nome lógico para o cenário no qual você está trabalhando. O artigo foca de forma superficial a utilização do Profiler, portanto veremos apenas recursos básicos do trace. Em seguida, acesse o campo denominado “Use the Template” e utilize o template “TSQL_Duration”, e logo após selecione a opção “Save to file” para salvar o trace em um arquivo com a extensão “trc”. Se você seguiu todos os passos corretamente, sua tela deverá estar configurada da mesma maneira que a Figura 3.&lt;br /&gt;Agora basta clicar no botão “Run” que o trace iniciará. Na configuração anterior, existe a guia “Events Selection” (Figura4), onde podemos configurar várias opções de traces, e os pontos que cada evento pode afetar. Para entender melhor e conhecer os inúmeros eventos que podemos realizar, busque no books online o assunto SQL Server Profiler.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Figura 3. Tela Configurada Para Realização do Trace&lt;br /&gt;&lt;br /&gt;Figura 4. Outras Opções de Trace e detalhamento de notificações para cada evento.&lt;br /&gt;&lt;br /&gt;Se apenas iniciarmos o trace e nada ocorrer dentro da base de dados, o mesmo não terá validade alguma. Portanto, para efeito de testes, execute a T-SQL proposta na Listagem 1 para realizarmos alguns exercícios com o âmbito de fixarmos o entendimento sobre o Profiler.&lt;br /&gt;Vamos supor que queremos saber dos clientes de número 270 a 280, quantos compraram acima de 10 itens na data superior a 31 de Dezembro de 2001, veja na listagem 1, que a consulta é complexa, pois conta com várias junções com outras tabelas, portanto, este é um bom exemplo para utilizarmos e realizar a análise do profiler e futuramente no DTA.&lt;br /&gt;&lt;br /&gt;Listagem 1. Código TSQL para realização do teste&lt;br /&gt;SELECT Production.Product.ProductID, Production.Product.Name AS ProductName, Sales.SalesOrderDetail.SalesOrderID, Sales.SalesOrderDetail.OrderQty,&lt;br /&gt;Sales.SalesOrderHeader.OrderDate, Sales.SalesTerritory.Name AS TerritoryName, Sales.SalesTerritory.CountryRegionCode,&lt;br /&gt;Sales.SalesPerson.SalesPersonID, Person.Contact.FirstName, Person.Contact.Phone&lt;br /&gt;FROM Sales.SalesPerson INNER JOIN Sales.SalesTerritory INNER JOIN&lt;br /&gt;Sales.Customer ON Sales.SalesTerritory.TerritoryID = Sales.Customer.TerritoryID AND&lt;br /&gt;Sales.SalesTerritory.TerritoryID = Sales.Customer.TerritoryID AND Sales.SalesTerritory.TerritoryID = Sales.Customer.TerritoryID AND&lt;br /&gt;Sales.SalesTerritory.TerritoryID = Sales.Customer.TerritoryID ON Sales.SalesPerson.TerritoryID = Sales.SalesTerritory.TerritoryID AND&lt;br /&gt;Sales.SalesPerson.TerritoryID = Sales.SalesTerritory.TerritoryID AND Sales.SalesPerson.TerritoryID = Sales.SalesTerritory.TerritoryID AND&lt;br /&gt;Sales.SalesPerson.TerritoryID = Sales.SalesTerritory.TerritoryID AND Sales.SalesPerson.TerritoryID = Sales.SalesTerritory.TerritoryID INNER JOIN Sales.SalesOrderHeader ON Sales.SalesPerson.SalesPersonID = Sales.SalesOrderHeader.SalesPersonID AND&lt;br /&gt;Sales.SalesTerritory.TerritoryID = Sales.SalesOrderHeader.TerritoryID AND&lt;br /&gt;Sales.Customer.CustomerID = Sales.SalesOrderHeader.CustomerID INNER JOIN&lt;br /&gt;Production.Product INNER JOIN Production.ProductModel ON Production.Product.ProductModelID = Production.ProductModel.ProductModelID INNER JOIN&lt;br /&gt;Sales.SalesOrderDetail ON Production.Product.ProductID = Sales.SalesOrderDetail.ProductID ON&lt;br /&gt;Sales.SalesOrderHeader.SalesOrderID = Sales.SalesOrderDetail.SalesOrderID AND Sales.SalesOrderHeader.SalesOrderID = Sales.SalesOrderDetail.SalesOrderID AND&lt;br /&gt;Sales.SalesOrderHeader.SalesOrderID = Sales.SalesOrderDetail.SalesOrderID AND Sales.SalesOrderHeader.SalesOrderID = Sales.SalesOrderDetail.SalesOrderID AND&lt;br /&gt;Sales.SalesOrderHeader.SalesOrderID = Sales.SalesOrderDetail.SalesOrderID INNER JOIN Person.Contact ON Sales.SalesOrderHeader.ContactID = Person.Contact.ContactID AND&lt;br /&gt;Sales.SalesOrderHeader.ContactID = Person.Contact.ContactID AND Sales.SalesOrderHeader.ContactID = Person.Contact.ContactID AND&lt;br /&gt;Sales.SalesOrderHeader.ContactID = Person.Contact.ContactID AND Sales.SalesOrderHeader.ContactID = Person.Contact.ContactID AND&lt;br /&gt;Sales.SalesOrderHeader.ContactID = Person.Contact.ContactID INNER JOIN&lt;br /&gt;Sales.CustomerAddress ON Sales.Customer.CustomerID = Sales.CustomerAddress.CustomerID&lt;br /&gt;WHERE (Sales.SalesPerson.SalesPersonID BETWEEN 270 AND 280)&lt;br /&gt;AND (Sales.SalesOrderDetail.OrderQty &gt; 10)&lt;br /&gt;AND (Sales.SalesOrderHeader.OrderDate &gt;&lt;br /&gt;CONVERT(DATETIME, &#39;2001-12-31 00:00:00&#39;, 102))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para realizar a consulta da Listagem 1 é necessário que você tenha a base de dados AdventureWorks (encontrada em http://www.microsoft.com/downloads/details.aspx?familyid=e719ecf7-9f46-4312-af89-6ad8702e4e6e&amp;amp;displaylang=en ) importada para a instância que você está realizando o trace. Logo após, abra um novo arquivo de script pelo SSMS e digite a consulta da Listagem 1. Rode a consulta e verifique no trace quantos milissegundos a consulta levou até ser finalizada. Após consultar, rode-a novamente e verifique na nova linha do trace quantos segundos a consulta durou. Observe agora que o tempo da consulta foi mais rápido, mas não se engane. Isso ocorre em função de que quando a consulta é executada pela segunda vez, a mesma deixa de ser uma consulta AD-HOC e fica armazenada em cache.&lt;br /&gt;&lt;br /&gt;Agora você já pode parar o trace. Para isto, acesse o menu File à Stop Trace. Como o trace já foi realizado salvando as informações em arquivo, basta fechar a janela do Profiler.&lt;br /&gt;Apesar de extenso, o conteúdo apresentado sobre o Profiler foi superficial e deve ser estudado de forma mais detalhada. Para isso, recomendamos a leitura do artigo sobre o Profiler da SQL Magazine, Edição 55.&lt;br /&gt;&lt;br /&gt;Utilizando Índices nas Tabelas&lt;br /&gt;Quando estamos buscando por um determinado assunto em um livro, a maneira mais rápida e fácil é pesquisar o índice do livro para assim acharmos a página que contém tal assunto. Assim é o uso do índex dentro do banco de dados. Quando estamos trabalhando com queries e estas apresentam falta de desempenho, o primeiro recurso que utilizamos, e, que quase sempre resolve o nosso problema, é o uso de índex nas tabelas.&lt;br /&gt;Antes de programar os indexes já vimos que conhecer o cenário e utilizar ferramentas de análise e monitoramento é importante para termos noção exata do que estamos fazendo. Portanto quando estamos no ponto de empregar os índex nas tabelas, passamos a ter outras preocupações, pois ao implementar um índex, operações como INSERT, UPDATE e DELETE perderão desempenho. Então temos mais este ponto de atenção e de confirmação de que implementar queries de forma a ganhar desempenho na base de dados é um exercício bem complicado e deve ser feito de forma inteligente.&lt;br /&gt;Índices são estruturas que possuem algoritmos otimizados para acessar dados. No SQL Server o índex trabalha com o algoritmo B-Tree. Este algoritmo é construído de maneira a armazenar informações da tabela de forma inteligente quando precisa ser consultado. Podemos dizer que um índex é uma cópia da tabela original, mas armazenada de forma inteligente.&lt;br /&gt;O SQL Server atualiza o índice com dados da tabela origem cada vez que a tabela recebe novos dados ou quando seus dados são atualizados. Quando isto ocorre, o resultado das consultas DML (INSERT, UPDATE e DELETE, por exemplo) perdem desempenho. Observe na Figura 5 que quando uma consulta T-SQL é acionada para buscar um determinado valor dentro de uma tabela, o acesso a este valor é feito através do índice escrito para essa tabela e deste ponto o SQL Server monta o result set de resposta. Diferente das consultas que não manipulam dados; as DMLs fazem com que a B-TREE seja reestruturada realocando valores nos níveis (levels) root, intermediate ou leaf de acordo com os dados que estão sendo inseridos, modificados ou retirados.&lt;br /&gt;&lt;br /&gt;Figura 5. T-SQL consultando um valor pelo índex e uma consulta DML incrementando o índex.&lt;br /&gt;&lt;br /&gt;Os tipos existentes de índex são: Clusterizado e Não-Clusterizado. Tanto o índex clusterizado como o não-clusterizado acessam o algoritmo B-Tree, então, qual a diferença? A resposta é que o índex clusterizado quando acessa o level folha (leaf level) o ponteiro já aponta diretamente para os dados que estão sendo pesquisados, e o não-clusterizado, em vez de apontar diretamente para os dados, primeiro encontra um valor referência que daí aponta para os dados.Uma consideração importante ao implementar um índex clusterizado é que o SQL Server só permite um índex por tabela, e como boas práticas, este deve ser criado em uma coluna de chave primária. Ao utilizar o não-clusterizado, você pode implementar até 249 índex, e como boas práticas, é aconselhável que tenhamos no máximo 5 índex para cada tabela. É comum que encontrarmos mais de 5 índices em tabelas, mas como citado, faz parte das boas práticas aconselhadas pela Microsoft termos poucos índices.&lt;br /&gt;Para criar um índex utilize a seguinte sintaxe:&lt;br /&gt;&lt;br /&gt;CREATE [ UNIQUE ] [ CLUSTERED NONCLUSTERED ] INDEX index_name&lt;br /&gt;ON( column [ ASC DESC] [ ,…n ] )&lt;br /&gt;[ INCLUDE ( column_name [ ,…n ] ) ]&lt;br /&gt;[ WITH ( &lt;relational_index_option&gt;[ ,…n ] ) ]&lt;br /&gt;[ ON { partition_scheme_name ( column_name )&lt;br /&gt;filegroup_name&lt;br /&gt;default&lt;br /&gt;}&lt;br /&gt;] [ ; ]&lt;br /&gt;&lt;br /&gt;Caso seja necessário desabilitar o índex utilize o comando:&lt;br /&gt;&lt;br /&gt;ALTER INDEX { index_name ALL }&lt;br /&gt;ON&lt;br /&gt;DISABLE [ ; ]&lt;br /&gt;&lt;br /&gt;Quando um índex é desabilitado, você deve recriá-lo toda vez que quiser tê-lo em sua tabela novamente, pois quando você o recria, o SQL Server faz a população do mesmo com os dados atuais da tabela. Para reconstruir um índex, utilize o seguinte código:&lt;br /&gt;&lt;br /&gt;ALTER INDEX { índex_name ALL }&lt;br /&gt;ON&lt;br /&gt;REBUILD [ ; ]&lt;br /&gt;&lt;br /&gt;Para mais informações sobre o assunto acesse ‘Books Online’, procurando por: “Covering Index” e “Reational Index”.&lt;br /&gt;&lt;br /&gt;Utilizando o DTA para tuning&lt;br /&gt;O DTA ou Data Base Engine Tuning Advisor é uma ferramenta que através da análise sobre as queries de entrada no analisador (workload), comparando o custo de cada uma para a base de dados, indica qual a melhor estrutura para suas tabelas, particionamentos ou views indexadas para resolução de problemas de desempenho. Como já vimos no tópico sobre o Profiler, é interessante que você realize as análises utilizando um arquivo trace gerado pelo Profiler. Dessa forma, você poderá filtrar as análises do DTA estreitando-as a analisar somente queries que quiser; desta maneira você não criará índex nem de menos nem demais e não terá o trabalho de analisar todas as consultas da base de dados a próprio punho. Para utilizar o DTA, vamos rever alguns pontos de observação:&lt;br /&gt;O DTA veio no lugar do Index Tuning Wizard (ITW) utilizado nas versões anteriores ao SQL Server 2005;&lt;br /&gt;Você pode utilizar um arquivo criado pelo Profiler e analisá-lo no DTA;&lt;br /&gt;Você pode exportar os relatórios de melhoria do DTA em arquivos XML para utilizá-los em analisadores de outros SGBDs;&lt;br /&gt;Você pode utilizá-lo para analisar uma única query selecionando-a e escolhendo a tool do DTA no menu tools.;&lt;br /&gt;É importante limitar o tempo de análise do DTA quando estiver com muitas consultas complexas para serem analisadas, senão o DTA passará horas ou até dias, dependendo da quantidade de consultas para dar o retorno;&lt;br /&gt;É importante especificar para o DTA em qual base de dados e tabelas ele rodará as analises;&lt;br /&gt;As análises são baseadas no custo de cada consulta que o query optimizer envia ao DTA mediante pesquisas na base de produção. O DTA simula várias combinações de indexação até não existirem maneiras de otimizar a consulta (Figura 6), para somente então, gerar o relatório final;&lt;br /&gt;Realize as análises do DTA utilizando um backup da sua base de produção em outro servidor para não perder desempenho, pois as análises do DTA são realizadas na base de produção;&lt;br /&gt;O resultado do DTA sempre consiste em criar uma nova estrutura e nunca realizar um delete em alguma existente. Por este motivo, sempre verifique se é necessário manter estruturas de índices na qual você já utilizou em algum momento.&lt;br /&gt;&lt;br /&gt;Figura 6. Representação do DTA realizando uma otimização de uma TSQL.&lt;br /&gt;&lt;br /&gt;O DTA é uma ferramenta fácil de utilizar e lhe oferece várias horas de tranqüilidade, pois realiza todas as análises de forma automática e facilita a vida dos nossos clientes.&lt;br /&gt;Você pode utilizar o DTA para realizar o tuning de um servidor de produção sem realizar backups. Portanto, para agilizar e automatizar a análise, o aconselhável a fazer é utilizar Jobs que iniciem um trace com o Profiler e de tempo em tempo este trace é parado e importado para dentro das análises do DTA. Escolha a opção para criação de índex online para não bloquear nenhuma transação que possa estar em concorrência com as análises (veja as limitações de uso desta opção para as edições do SQL Server 2005 no books online).&lt;br /&gt;Para configurar o DTA, acesse-o, como indica a Figura 7. Selecione em Workload um arquivo TRC (trace do profiler), de acordo com a Figura 8, e especifique as opções de tuning na guia “Tuning Options”, apresentado na Figura 9.&lt;br /&gt;&lt;br /&gt;Figura 7. Abrindo o DTA (O DTA também pode ser aberto através do SSMS).&lt;br /&gt;&lt;br /&gt;Figura 8. Configurando a tela “General” do DTA.&lt;br /&gt;&lt;br /&gt;No campo “Session name“ (Figura 8) indique um nome de preferência ou deixe o padrão. Após fazer isso, indique o “Workload” (File ou Table). Neste caso, utilize o trace que fizemos na sessão do Profiler. Depois é só indicar a base de dados e tabelas (podendo ser selecionadas na lista dropdown ao lado direito do nome da base de dados) para análise.&lt;br /&gt;&lt;br /&gt;Figura 9. Configurando as opções do tuning.&lt;br /&gt;&lt;br /&gt;Na guia “Tuning Options” você indica como as análises devem se comportar e quais tipos de análises serão realizados. Como a tela é bem didática, vamos fazer somente algumas considerações; veja que na parte inferior da tela existe o campo “Description”, este campo dá dicas do comportamento da análise a cada escolha que você realiza nesta tela. Para efeito de teste, selecione as duas opções marcadas na Figura 9, e observe que a descrição apontará um erro. A falha está em optar para que o DTA não trabalhe com estratégias de particionamento e ao mesmo tempo pedir para manter os particionamentos alinhados. Como já foi dito, mesmo não existindo um tempo limite é importante limitar este tempo de analise quando estiver trabalhando em uma base de dados de produção. Por este motivo, mantenha o campo “Limit Tuning Time” marcado. Após todas as configurações, clique em “Start Analysis” para permitir o início das analises.&lt;br /&gt;Quando o DTA inicializa as análises ou termina de realizá-las, a tela principal do DTA é configurada com mais três guias, são elas: Progress, que indica o progresso da análise; Recommendations, que são as recomendações feitas para ganho de performance; e por último a Reports, que faz um resumo da análise. Para utilizar as recomendações feitas pelo DTA, basta selecionar na guia Recommendations a coluna Definitions e clicar no link para que o SQL exiba o script de criação de uma nova estrutura para melhorar a performance das queries contidas no arquivo trace (observe a Figura 10).&lt;br /&gt;&lt;br /&gt;Figura 10. Utilizando os scripts para melhoria de desempenho das queries.&lt;br /&gt;&lt;br /&gt;Para criar as indexes, Estatísticas e/ou Particionamentos, basta clicar no botão “Copy to Clipboard” da janela popup, e utilizar o script dentro do SSMS.&lt;br /&gt;De acordo com o DTA, se programarmos todas as recomendações que ele propôs para o trace que fizemos (uma única T-SQL), o desempenho da consulta pode melhorar em até 75%. Então, siga as recomendações e após implementar todas elas, teste a consulta da Listagem 1 novamente. Perceba que o DTA não pode melhorar a consulta, pois todas as estruturas necessárias para aumentar o desempenho desta T-SQL já foram então, implementadas anteriormente por você.&lt;br /&gt;Caso não queira utilizar as recomendações do DTA no mesmo momento, você pode salvá-las para utilizar futuramente. Pode também re-analisar na guia reports, vários relatórios gerados para cada item analisado.&lt;br /&gt;Uma maneira de conhecer tudo o que as ferramentas do SQL Server 2005 pode lhe trazer é fazer da utilização do Books Online um hábito, pois nele você encontra especificações extremamente ricas para cada mínima coisa que você está pesquisando. Este conselho fica para estudar ainda mais o DTA.&lt;br /&gt;Conclusão&lt;br /&gt;Com um cenário tão complexo no qual estamos, precisamos apreender a trabalhar com o que temos em mãos e buscar aprimorar nosso conhecimento cada vez mais. A atualidade obriga empresas terem lucros altos, mas investindo pouco. Portanto, é importante que cada DBA faça sua parte nessa estratégia. Conhecer não só as ferramentas que nos cercam, mas também o cenário como um todo é muito importante, pois a cada dia surgem novas tecnologias e devemos estar atualizados; Então o artigo foca a importância da visão sistêmica no dia-a-dia e também o que temos de ferramentas para trabalhar dando desempenho total para as nossas queries.&lt;br /&gt;&lt;br /&gt;De que se trata o artigo?&lt;br /&gt;Este artigo utiliza o Database Engine Tuning Advisor abordando boas práticas de sua utilização e os cuidados quanto a implementação de índices&lt;br /&gt;&lt;br /&gt;Para que serve?&lt;br /&gt;A tecnologia apresentada nos permite analisar de forma minuciosa tudo que pode ser melhorado em uma querie e em outras estruturas como uma view indexada, também nos oferece agilidade e praticidade para tal análise e implementação.&lt;br /&gt;&lt;br /&gt;Em que situação é útil?&lt;br /&gt;Útil para ganho de desempenho das queries que possam estar com certa lentidão ao serem utilizadas e também para encontrarmos possíveis erros lógicos e falhas de disco, já que temos como melhor prática, o uso do Profiler, e ele nos mostra tudo isso.&lt;br /&gt;&lt;br /&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Referências&lt;br /&gt;SQL Server Bible - Paul Nielson, Wiley&lt;br /&gt;A Questão da Informação - Publicação da revista São Paulo, n 4, 1994.&lt;br /&gt;Training Kit – Publicado por Solid Quality Learning, 2007.&lt;br /&gt;Inside Microsoft SQL Server 2005: T-SQL Programming – Itzik Ben-Gan, Dejan Sarka e Roger Wolter.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://canaldba.blogspot.com/feeds/2078665736362066825/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://canaldba.blogspot.com/2009/12/tuning-index-com-o-dta.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32223696562979219/posts/default/2078665736362066825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32223696562979219/posts/default/2078665736362066825'/><link rel='alternate' type='text/html' href='http://canaldba.blogspot.com/2009/12/tuning-index-com-o-dta.html' title='Tuning Índex com o DTA'/><author><name>Canal DBA</name><uri>http://www.blogger.com/profile/11598950184411346339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_WLDr--ilaf4/SzBfQ54C8yI/AAAAAAAAAAM/JkdvCasuJ4M/S220/pc.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32223696562979219.post-3454045239898154647</id><published>2009-12-07T21:13:00.000-08:00</published><updated>2009-12-07T21:20:58.395-08:00</updated><title type='text'>DBA Channel - Welcome</title><content type='html'>&lt;strong&gt;Hi Folks&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;First of all I would like to thank you for your visit and also let you know that this blog will be always receving you with open heart!&lt;br /&gt;Here you can find thounsand of articles related to MS SQL daily routine and stuffs. Keep visiting, commenting and talking to us, doing so we ensure a well done comunication and I will be sure that it is an ongoing guideline!&lt;br /&gt;&lt;br /&gt;Thanks again!&lt;br /&gt;Marcos Rosa</content><link rel='replies' type='application/atom+xml' href='http://canaldba.blogspot.com/feeds/3454045239898154647/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://canaldba.blogspot.com/2009/12/dba-channel-welcome.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32223696562979219/posts/default/3454045239898154647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32223696562979219/posts/default/3454045239898154647'/><link rel='alternate' type='text/html' href='http://canaldba.blogspot.com/2009/12/dba-channel-welcome.html' title='DBA Channel - Welcome'/><author><name>Canal DBA</name><uri>http://www.blogger.com/profile/11598950184411346339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_WLDr--ilaf4/SzBfQ54C8yI/AAAAAAAAAAM/JkdvCasuJ4M/S220/pc.JPG'/></author><thr:total>1</thr:total></entry></feed>