Resposta – Script Challenge – Número 4

Resposta – Script Challenge – Número 4.


Pessoal,

Estou de volta, com a resposta para o Script Challenge – Número 4, postado a alguns dias atrás. Pois bem, para aqueles que não quiseram gostar um pouco do seu tempo tentando acha a resposta, aqui esta ela.

— Código – Script Challenge – Número 4 —

Declare @Texto VarChar(100)

Set @Texto = ‘Este é um pequeno texto para exemplificar a utilização da função Reverse’

Print ‘Texto Normal’+Char(13)+@Texto

Print ‘Texto’+Char(13)+Reverse(@Texto)

A resposta é simples neste script estou utilizando a função Reverse que possui a finalidade de inverter uma palavra, frase ou texto. Fazendo com que o texto seja escrito do final para o começo da esquerda para direita.

Para entender melhor, veja o resultado apresentado na Figura 1.

Como podemos observar ao utilizar a função Reverse nosso simples texto foi invertido.

Bom, vou ficando por aqui, espero ter mais uma vez ajudado.

Até mais.

Script Challenge – Número 4.

Script Challenge – Número 4.


Pessaoal,

Estou de volta com mais um Script Challenge, estamos no número 4 e novamente conto com a participação de todos.

Hoje, vou postar um código mais simples, espero que seja fácil a resposta. Então vamos lá, segue abaixo o código referente ao Script Challenge – Número 4.

— Script Challenge – Número 4: —

Declare @Texto VarChar(100)

Set @Texto = ‘Este é um pequeno texto para exemplificar a utilização da função Reverse’

Print ‘Texto ‘+Char(13)+@Texto

Print ‘Texto ‘+Char(13)+Reverse(@Texto)

Bom esta aqui o código, agora basta você teste e me enviar a resposta por e-mail ou comentário, caso até o dia 12/01 nenhuma resposta seja enviada, eu volta com a resolução de mais este Script Challenge.

Até mais.

 

Resposta – Script Challenge – Número 3

Após as festas de final de ano, vou recuperando o pique e voltando ativa, e como de costume, vou postar a resposta para o Script Challenge – Número 3, publicado na semana passada.


Galera,

Após as festas de final de ano, vou recuperando o pique e voltando ativa, e como de costume, vou postar a resposta para o Script Challenge – Número 3, publicado na semana passada.

Para aqueles que não acessaram este post, segue abaixo o código publicado:

–Script Challenge – Número 3 —

SELECT objtype, usecounts, COUNT(*) AS [no_of_plans]

FROM sys.dm_exec_cached_plans 

 

 

WHERE cacheobjtype = ‘Compiled Plan’

GROUP BY objtype, usecounts

ORDER BY objtype, usecounts

Então, esta aqui o código e qual seria a sua finalidade e aplicabilidade?

Para começarmos a encontrar as respostas, vamos iniciar mais uma vez a análise do código partindo da identificação de mais uma DMV utilizada, conhecida como sys.dm_exec_cache_plans. Esta DMV tem como finalidade armazenar e controlar as informações sobre os caches utilizados pelo Plano de Execução durante o processamento de transações(querys) T-SQL.

A sys.dm_exec_cache_plans pode ser considerada uma evolução da antiga system table syscacheobjects, bastante utilizada no SQL Server 2000.

Bom, agora que já sabemos qual dos recursos estão sendo utilizados, vamos então analisar outras partes do código.

Podemos observar que três colunas são retornadas ao usuário na execução deste script, sendo estas colunas:

  • Objtype –> Informa o tipo de objeto ou forma de execução que esta sendo utilizado no Plan Cache;
  • Usecounts –> Esta coluna retorna um totalizador de quantas vezes a mesma transação(query) foi executada;
  • COUNT(*) –> Nesta coluna será retornada informações sobre uma contagem de valores realizadas em todas as colunas da DMV sys.dm_exec_cache_plans, com objetivo de apresentar quantas vezes Plan Cache não necessitou ser gerado.

Já sabemos os retornos que podemos ter após executar este código, quais informações podem ser apresentadas ao usuário, com isso fica mais fácil aplicar este script em nosso ambiente.

Sendo assim, agora deixa para você testar em seu ambiente e ver quais resultados poderá obter, vale ressaltar que a qualquer momento você poderá realizar uma limpeza do Plan Cache fazendo uso do comando DBCC FreeProcCache().

Veja a seguir a Figura 1 que utilizar de forma gráfica o resultado do Script Challenge – Número 3.

Figura 1 – Retorno do código Script Challenge – Número 3.

Pessoal, agradeço a sua atenção e mais uma vez espero que este código posso ajudar, vou ficando por aqui, pensando no próximo Script Challenge, agora o número 4, publicado na próxima semana.

Um grande abraço.

Script Challenge – Número 3

Script Challenge – Número 3.


Galera,

Estou de volta com mais um Script Challenge!!!

Nesta semana vou postar o Script Challenge – Número 3. Como todos já sabem trata-se de um pequeno de desafio, que possui o objetivo de fazer com que o participantes postem as possíveis respostas ou comentários com base no Script postado.

Então vamos lá, segue abaixo o código do Script Challenge – Númer 3, conto com sua participação.

— Código – Script Challenge – Número 3 —

SELECT objtype,

              usecounts,
              COUNT(*) AS [no_of_plans]
FROM sys.dm_exec_cached_plans
WHERE cacheobjtype = ‘Compiled Plan’
GROUP BY objtype, usecounts
ORDER BY objtype, usecounts

Caso nenhuma resposta ou comentário seja enviado, retorna com a resposta para mais esta desafio nos próximos dias.

Até mais.

Resposta – Script Challenge – Número 2.

Resposta – Script Challenge – Número 2.


Pessoal,

Como prometido estou postando a resposta para o Script Challenge – Número 2, postado no último domingo dia 19/12/2010. Recebi alguns e-mails de visitantes do blog questionando em qual situação este script poderia ser utilizado, mas isso justamente era a resposta que eu gostaria de ter recebido, mas vamos lá, vou tentar explicar como podemo utilizar e qual seria a finalidade de código.

Pois bem, o código postado no Script Challenge – Número 2, esta postado a seguir:

— Script Challenge – Número 2 —
SELECT  r.session_id, r.[status],
              r.wait_type,  r.scheduler_id,
              SUBSTRING(qt.[text], r.statement_start_offset / 2,
              (CASE WHEN r.statement_end_offset = -1
                               THEN LEN(CONVERT(NVARCHAR(MAX), qt.[text])) * 2

                ELSE r.statement_end_offset
                END – r.statement_start_offset ) / 2) AS [statement_executing],
              DB_NAME(qt.[dbid]) AS [DatabaseName],
              OBJECT_NAME(qt.objectid) AS [ObjectName],
              r.cpu_time, r.total_elapsed_time,
              r.reads, r.writes,
              r.logical_reads, r.plan_handle
FROM sys.dm_exec_requests AS r
           CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS qt
WHERE r.session_id > 50
ORDER BY r.scheduler_id, r.[status], r.session_id;

 

Podemos começar a fazer a análise deste código e como sempre gosto de destacar os recursos que estão sendo utilizados por parte do SQL Server, destaco as DMV’s:

  • sys_dm_exec_requests –> Responsável em retornar informações sobre as requisições do usuários ao SQL Server.
  • sys_dm_exec_sql_text –> Responsável em apresentar ao usuário informações sobre os comandos tratados nas requisições do SQL Server, permitindo visualizar o código Transact – SQL que esta sendo processado.

 Agora que já identificamos as DMVs que estão sendo utilizadas, podemos revelar o segredo do código, trata-se de um script utilizado para obter informações sobre as requisições em processamento, bem como, as requisições que encontra-se bloqueadas, conforme apresenta a Figura 1.


Figura 1 – Relação de requisições em processamento ou bloqueadas.

Através das colunas Status e Wait_Type, torna-se possível obter as informações referentes aos atual status da requisição, bem como, que tipo de recurso esta sendo aguardado pela requisição durante o seu processamento.

Para aplicar este código, minha sugestão é trabalhar com duas querys simultaneamente, na Query 1, você coloca o Script Challenge – Número 2, na Query 2 podemos montar um pequeno código de exemplo bem simples, forçando a sobrecarga de processamento e um possível deadlock. Como por exemplo este código utilizado para gerar uma sobrecarga de processamento.

— Código de exemplo a ser utilizado no Query 2 —

Declare @Codigo Int 

Set @Codigo=0

While @Codigo <=1000

begin

  Set @Codigo =+1

  Select @Codigo

End

Bom, acredito que mais uma vez consegui apresentar um recurso que esta presente no SQL Server mas pouco utilizado, que poderá ser útil a ajudar no seu dia-a-dia.

Até o próximo Script Challenge – Número 3, postado nos próximos dias.

Script Challenge – Número 2

Script Challenge – Número 2.


Galera,

Continuando com a série Script Challenge, vou postar o Script Challenge – Número 2, como já deve ser conhecimento. O objetivo de série é apresentar um pequeno desafio para resolução do Script contando com a participação dos visitantes do blog, postando seu comentário.

Então vamos lá, segue abaixo o Script Challenge – Número 2:

— Código – Script Challenge – Número 2 —

SELECT  r.session_id ,

        r.[status] ,

        r.wait_type ,

 

        r.scheduler_id ,

        SUBSTRING(qt.[text], r.statement_start_offset / 2,

            ( CASE WHEN r.statement_end_offset = -1

                   THEN LEN(CONVERT(NVARCHAR(MAX), qt.[text])) * 2

                   ELSE r.statement_end_offset

              END – r.statement_start_offset ) / 2) AS [statement_executing] ,

        DB_NAME(qt.[dbid]) AS [DatabaseName] ,

        OBJECT_NAME(qt.objectid) AS [ObjectName] ,

        r.cpu_time ,

        r.total_elapsed_time ,

        r.reads ,

        r.writes ,

        r.logical_reads ,

        r.plan_handle

FROM    sys.dm_exec_requests AS r

        CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS qt

WHERE   r.session_id > 50

ORDER BY r.scheduler_id ,

        r.[status] ,

        r.session_id ;

Esta aqui o código, e até quarta – feira, caso nenhum participante ou visitante tenha a resposta para este código, eu postarei a resposta.

É isso, conto com a participação de todos.

Até mais.

Resposta – Script Challenge – Número 1

Resposta – Script Challenge – Número 1.


Pessoal,

Como prometido, vou postar a resposta para o Script Challenge – Número 1, postado na última sexta – feira dia 10/12/2o10. O código postado neste primeiro Script Challenge, foi este:

SELECT  ec.client_net_address,

              es.[program_name],

              es.[host_name],

              es.login_name,

              COUNT(ec.session_id) AS [connection count]

FROM sys.dm_exec_sessions AS es INNER JOIN sys.dm_exec_connections AS ec

                                                           ON es.session_id = ec.session_id

GROUP BY ec.client_net_address,

                  es.[program_name],

                  es.[host_name],

                  es.login_name

ORDER BY ec.client_net_address,  es.[program_name];

Realizando uma simples análise no código, podemos notar a utilizar de uma DMV a sys.dm_exec_connections, partindo deste principio já podemos imaginar que este código esta relacionado com algum procedimento de conexão realizado no SQL Server.

Mas qual seria realmente o objetivo ou finalidade deste código?

Vamos então responder esta pergunta:

Trata-se de um código simples, que retorna ao usuário a relação de conexões realizadas no SQL Server com base no endereço IP da cada estação de trabalho ou servidor conectado a instância SQL Server em que o código foi executado.

Outro detalhe, este código utiliza a DMV a sys.dm_exec_connections, responsável em apresentar informações sobre as conexões realizadas ao nosso servidor SQL Server.

Além disso, este código realiza uma contagem das conexões das conexões através do comando Count, utilizando a Session_ID, bem como, apresenta o nome dos aplicativos utilizadas por cada sessão de forma agrupada.

Veja então o resultado da execução deste código, com base, na Figura 1, apresentada a seguir: Figura 1 – Resultado da execução do Script Challenge – Número 1.

Como você pode observar na Figura 1¸foram retornadas duas linhas de registro, correspondente as conexões ativas neste momento na minha máquina, sendo uma, utilizada pelo próprio SQL Server conectada ao Management Studio e outras 5 conexões utilizando Querys dentro do Management Studio.

A coluna Net_Address, esta retornando a palavra <Loca_Machine> ao invês do endereço de IP, pelo simples motivo de eu estar utilizando esta máquina stand alone, eu já, não é uma máquina conectada ao um servidor de domínio, muito menos a algum servidor DNS ou DHCP.

Bom espero que este primeiro Script Challenge possa ilustrar o objetivo deste post e próximos, quem sabe nos próximos poderia contar a com participação dos meus amigos e colegas que visitam o meu blog diáriamente.

Por enquanto fica o recado, participem, na próxima sexta – feira, eu retorno com o segundo Script Challenge. Valeu.

Até mais.