Consultoria SQLInsiders.net

A todos vocês que acompanham o blog, tenho uma novidade: Consultoria  e Administração Remota de SQL Server.

Esse novo serviço deve ter um site especial em breve, mas por enquanto em primeira mão, estou disponibilizando meus contatos a quem precisa de um profissional SQL Server experiente.

Foco do trabalho

  • Pequenas e médias empresas com equipes de TI reduzida com a necessidade de um DBA para realizar as tarefas de administração de banco de dados. 
  • Equipes formadas que precisam de treinamento e orientação com foco no trabalho da empresa.
  • Treinamento para Self-Service BI

Tarefas realizadas

  • Instalação, manutenção e upgrade de SQL Server.
  • Monitoramento remoto do servidor.
  • Planejamento e implementação de rotinas de recuperação de desastres.
  • Confecção de manuais de procedimentos internos.
  • Relatório do ambiente monitorado.

 

Tecnologias envolvidas

  • Analysis Services
  • Integration Services
  • Reporting Services
  • Power Pivot
  • Administração de Banco de dados
  • Desenvolvimento
  • Tuning

 

Contato: Robson Brandão

 

image

Usando a função ROW_NUMBER()

A função ROW_NUMBER() gera um número sequencial de linhas, começando no número 1.
É uma espécie de auto-numerador de registros.

Sintaxe:

ROW_NUMBER ( ) OVER ( <Conjunto de dados>, <ordenação> )

O uso da cláusula OVER faz parte da função ROW_NUMBER() e não pode ser omitida.
Dentro dela, colocamos o conjunto de dados(opcional) e sua ordenação.

Segue um exemplo simples para ilustrar o uso da função.

Use AdventureWorks2008R2

go

 

SELECT ROW_NUMBER() OVER (ORDER BY ProductId) Sequencia,SalesOrderId,ProductID, CarrierTrackingNumber

FROM sales.SalesOrderDetail

No exemplo, uma coluna Sequencia é criada, e contém apenas a numeração da linha, seguindo inclusive o cabeçalho de linha da Resultset. Conforme a figura a seguir:

Row_Number1

Usando Partition By

Para numerar dentro de um grupo registros, usamos o argumento Partition By.

O Partition By funciona como um Group By.

Ele agrupa os dados de acordo com a coluna indicada e numera sequencialmente as linhas do grupo, reiniciando a numeração quando um novo grupo começa.

SELECT ROW_NUMBER() OVER (Partition By SalesOrderID ORDER BY ProductID) Sequencia, SalesOrderId,ProductID, CarrierTrackingNumber

FROM sales.SalesOrderDetail

O código acima agrupa os registros pelo campo SalesOrderID e ordenado por ProductID.

Observe na figura abaixo a transição de um grupo para outro. Note que ao mudar o conjunto de dados, recomeça a numeração.

O pedido número 43661 tem 15 itens. Ao mudar para o pedido 43662 a numeração recomeça.

Row_Number2

Esse artigo teve como objevo conceituar o uso da função ROW_NUMBER().

Em outros, estarei explorando casos de uso prático da função.

Instalando o SQL Server 2012 no Windows Server Core – Parte 2

A instalação no ambiente Core é feita no modo silencioso. Não temos suporte de assistentes (wizards) para nos auxiliar.

Para fazer a instalação, usamos o SETUP.EXE.

Todos os parâmetros devem ser passados através de linha de comando, por isso, é importante conhecer os parâmetros disponíveis para referência.

Segue uma lista de parâmetros usados na instalação:

/Action: Possui os valores (Install, Uninstall e UPGRADE). É usado para instalar ou remover recursos do SQL Server especificado no parâmetro Features. Exemplo: /ACTION=Install

/Features: Aqui podemos especificar os recursos e serviços que vamos instalar no SQL Server. Possui diversos valores, conforme a tabela a seguir:

Valores para /Features Significado
SQLEngine Instala o serviço de Mecanismo de Banco de dados
FullText Serviço de FullText
AS Componentes do Analysis Services
IS Componentes do Integration Services
CONN Componentes de conectividade
REPLICATION Componente de Replicação

  Exemplo: SETUP /Features=SQLEngine

/InstanceName: Define o nome da instância a ser instalada.
Se for a instância default usamos /InstanceName=”MSSQLSERVER”

/SQLSVCAccount: Especifica a conta de serviço do SQL Server.

/SQLSVCPassword: Especifica a senha.

/SQLSysAdminAccounts: Define as contas administradoras do SQL Server.

/IAcceptSQLServerLicenseTerms: Parâmetro obrigatório sobre a aceitação do contrato de licença do SQL Server.

/ASSVCAccount: Conta de serviço do Analysis Services.

/ASSYSAdminAccounts: Define a conta Administradora do serviço de Analysis Services.

/ASServerMode: Possui dois valores (MULTIDIMENSIOPNAL e TABULAR). Define o tipo de serviço de Analysis Services será instalado.

Agora que conhecemos os parâmetros, vamos juntá-los para fazer uma instalação.

SETUP.EXE /ACTION=Install /FEATURES=SQLEngine,Replication,Conn
/INSTANCENAME=MSSQLSERVER /SQLSVCAccount=”Domain\User”
/SQLSVCPassword =
“Passw0rd” /SQLSysAdminAccounts=”Domain\User”
/IAcceptSQLServerLicenseTerms=”True”

Após digitar o comando acima, a instalação começa:

core0

A instalação é feita totalmente em interface de texto, temos janelas que aparecerão…

core1

Mostrando o status da instalação e seu andamento…

core2

Agora é só aguardar… A instalação termina em breve.

Gerenciando o SQL Server 2012 no Server Core

A instalação está feita, mas agora como vamos gerenciar essa instância sem ter o Management Studio ? Temos 2 respostas para a pergunta:

1) Habilitar acesso remoto e usar um Management Studio de outra máquina para se conectar no servidor

2) Gerenciar pelo prompt de comando mesmo.

Habilitando conexões remotas no SQL Server 2012 Server Core

Para fazer as configurações, devemos disparar o SQLCMD.EXE e dentro dele rodar a procedure sp_configure.

Entre na pasta BINN da unidade de instalação do SQLServer e dispare o SQLCMD.EXE. Veja a figura:

Core4

Após conectar, execute a store procedure sp_configure habilitando as conexões remotas.

Core5

O SQLCMD.EXE é uma ferramenta de gerenciamento do SQL Server através de prompt. Se quiser saber algo mais sobre a ferramenta, visite o link da Microsoft em http://msdn.microsoft.com/pt-br/library/ms162773.aspx

Desistalando o SQL Server

Para remover componentes do SQL Server, basta usar o parâmetro Action com o valor Unistall e especificar a instância. Veja um exemplo:

SETUP.EXE /Action=Uninstall /Features=AS /InstanceName=MSSQLSERVER

Para ver a primeira parte do artigo, clique no link:
Instalando SQL Server 2012 no Windows Server Core – Parte 1

Nova série de VideoCasts do SQLInsiders.net

O SQLInsiders.net começa uma série de VideoCasts demonstrando rotinas do dia-a-dia sobre o SQL Server.

Uma nova barra na lateral direita foi criada para publicar os vídeos.

Aproveitem !

Instalando o SQL Server 2012 no Windows Server Core – Parte 1

Limitar o uso de serviços no servidor de produção é uma preocupação constante de quase 100% dos administradores de sistemas.

O uso do Windows Server Core surgiu no Windows Server 2008 e desde lá serviços como Domain Controllers, DHCP, DNS e até o Exchange rodam na plataforma sem interface gráfica, usando o mínimo de recursos de hardware para manter os serviços.

Agora chegou a hora do SQL Server ter suporte no Windows Core.

Nesta primeira parte do artigo, vamos preparar o ambiente para receber o SQL Server 2012.

Preparando o ambiente

A primeira etapa é fazer a instalação do Windows Server Core. Essa instalação deve ser nova, upgrades não são permitidas.

Durante o processo de instalação do Windows, você deve escolher a versão específica para trabalhar com Core Edition.

SQL2012_core1

A instalação é simples e rápida e todo gerenciamento é feito por comandos em uma tela igual a mostrada a seguir:

SQL2012_core2

Por não ter botão Iniciar e nenhuma interface gráfica, devemos explorar o Windows pelo prompt de comandos.

Para quem não conhece NADA, nunca trabalhou com MS-DOS ou nunca fez uma configuração windows por comandos, segue nessa primeira etapa do artigo um mini-guia com alguns comandos que serão uteis durante a instalação do SQL Server 2012.

Principais comandos de gerenciamento do Windows Core

Segue abaixo alguns comandos principais para que você consiga gerenciar o servidor onde o SQL Server 2012 vai ficar hospedado.

1) Obter nome da máquina
Hostname

2) Alterar o nome da máquina em um workgroup
netdom renamecomputer <nomeatual> /NewName:<novonome>

SQL2012_core4

Reiniciar o computador é necessário.

3) Criar uma conta de usuário Windows
Net user sqlserver /add *

Nesse caso criei a conta sqlserver.

SQL2012_core5

4) Adicionar um usuário ao grupo Administrators

net localgroup Administrators /add Vancouver\sqlserver

Lembrando que Vancouver é o nome do meu servidor e sqlserver é o nome da conta que criei.

5) Verificar o IP da máquina
Ipconfig /all

6) Retornar a configuração de rede
Netsh interface ipv4 show interfaces

SQL2012_core6

7) Modificar IP da máquina.
netsh interface ipv4 set address name=”3”source=static address=10.0.2.15 gateway=10.0.2.2

No comando acima, observe no parâmetro name o número 3. Ele se refere ao Idx 3 da lista de placas de rede disponíveis no servidor.

Para maiores detalhes sobre os comandos do Windows Core Edition, acesso o link:
http://technet.microsoft.com/en-us/library/ee441258(WS.10).aspx

Módulo carregados no SQL Server

No processo de troubleshooting, é necessário saber se há algum módulo (DLL ou executáveis), carregado na memória do SQL Server.

Algum módulo suspeito, ou não identificado, além de um antivírus, podem estar presentes na memória do SQL Server rodando e atrapalhando o desempenho.

Para verificar isso, use a DMV sys.dm_os_loaded_modules.
select * from  sys.dm_os_loaded_modules

mod

Os Assemblies do .NET Framework, arquivos do próprio SQL Server e suas respectivas versões são retornadas. Se tiver algum assembly de um Anti-vírus, por exemplo, é porque ele está lendo a memória do SQL Server causando stress no servidor e diminuindo a performance.

Usando Task List no SSMS

Se você tem muitas tarefas diárias para realizar com o SQL Server, pode usar o recurso de TaskList semelhante ao Outlook.

No menu view do SQL Server Management Studio, ative a opção TaskList:

task1

Surge na área inferior da ferramenta o painel do TaskList. Em destaque, o botão que cria uma nova tarefa.

task2

Clicando no botão, é só criar as tarefas e após terminá-las, é só marcar:

task3

É possível também colocar comentários sobre as tarefas:

task4

Organize-se…

Até a próxima…

O que é melhor: MAX() ou SELECT TOP 1

O que usar na hora de retornar o valor mais alto de uma tabela, a função MAX() ou a cláusula TOP ? Vamos aos testes.

Primeiro, vamos criar a tabela que será usada como laboratório.

create database Lab

go


use
Lab

go

 

CREATE TABLE tbl_Lab

(

ID INT IDENTITY(1, 1),

Col1 VARCHAR(100),

Col2 datetime

)

GO

 

Em seguida, vamos rodar um script para popular essa tabela.

Esse script gera 1 milhão de registros na tabela

 

DECLARE @RowCount INT

DECLARE @RowString VARCHAR(10)

DECLARE @Random INT

DECLARE @Upper INT

DECLARE @Lower INT

DECLARE @InsertDate DATETIME

 

SET @Lower = -730

SET @Upper = -1

SET @RowCount = 0

 

WHILE @RowCount <= 1000000

BEGIN

SET @RowString = CAST(@RowCount AS VARCHAR(10))

SELECT

@Random = ROUND(((@Upper - @Lower - 1) * RAND()

 + @Lower), 0)

SET @InsertDate = DATEADD(dd, @Random, GETDATE())

 

INSERT INTO

tbl_Lab (Col1,Col2)

VALUES

(

REPLICATE(’0′, 10 - DATALENGTH(@RowString))

+ @RowString,

DATEADD(dd, 1, @InsertDate)

 )

 

SET @RowCount = @RowCount + 1

END

 

Agora, vamos aos nossos testes de performance:

 

1) Habilitar as estatísticas de IO e TIME.

SET STATISTICS IO ON

SET STATISTICS TIME ON

2) Agora vamos limpar o cache por completo

DBCC FREEPROCCACHE

DBCC FREESYSTEMCACHE(‘ALL’)

3) Habilitar o Execution Plan

 

execPlan

 

4) Teste 1:Usando a cláusula TOP 1

 

 

SELECT TOP 1 ID FROM tbl_Lab  ORDER BY id desc

 

Verificando o Plano de Execução, vemos um Table Scan de quase 10 MB e um Sort com 95% de custo.

 

plan1

 

Quanto às estatísticas, 4546 páginas lidas.

 

estatis1

 

 

5) Limpar o cache novamente:

 

DBCC FREEPROCCACHE

DBCC FREESYSTEMCACHE(‘ALL’)

 

6) Teste2: Execute a query com o MAX()

 

SELECT MAX(ID) FROM tbl_Lab

Temos uma redução no Table Scan. o MAX então é mais eficiente.

plan2

 

stats2

 

 

7) Repetindo os testes, mas com Índice Clustered na tabela.

 

CREATE CLUSTERED INDEX inx_id ON tbl_Lab(ID)

Resultado com TOP 1:

plan3

 

Resultado com MAX():

 

plan4

 

As Estatísticas foram as mesmas:

 

stats3

 

 

RESULTADO:

Sem INDEX: MAX() é mais eficiente.

Com INDEX: Empate.

Dica rápida – Bancos de sistema e Filegroups

Bancos de sistema, exceto o MSDB, não permitem criação de filgroups.

É muito comum adicionarmos mais arquivos ao TempDb para evitar contenção. Mas é importante dizer que: Novos arquivos são permitidos, filegroups não.

tempdb_error_fg

Usando Zoom no Management Studio do SQL Server Denali

Durante apresentações, é comum alguém lá no fundo da sala ou do auditório pedir para aumentar a exibição do código.

No SQL Server Denali (2012), podemos fazer isso facilmente através de um controle de zoom.

na parte inferior do SSMS, basta escolher o zoom desejado:

zoom3

Visualização em 100%

zoom1

Visualização em 400%

zoom2

Até o próximo…