quarta-feira, 18 de março de 2015

Encontrando usuários e suas sessões no SQL

Vamos descobrir quais usuários estão conectados e quantas sessões cada um possui no momento?

Esta informação é muito útil quando vamos iniciar uma janela de manutenção ou quando queremos saber se há um aumento na quantidade de sessões por usuário. Podemos verificar quem está conectado no momento, avisar que o SQL vai parar e então iniciar aquela manutenção agendada.

De onde vem estas informações?

Estas informações são armazenadas nas DMVs (Dynamic Management Views), novidade na versão 2005 do SQL e mantida até as versões atuais.

Uma DMV é como uma View onde podemos armazenar o resultado de um Select. Neste caso, estamos trazendo as informações da DMV chamada sys.dm_exec_sessions:

 

Conhecimentos basicos sobre Storage

O que é

Uma storage nada mais é do que um dispositivo com um ou mais discos capaz de se conectar aos servidores o prover espaço em disco da mesma forma que um disco local. É um hardware (pode ser um servidor comum ou equipamento dedicado à função de storage) com um sistema operacional (exclusivo ou adaptado como Linux, CentOS, Windows, etc.) que, através de conexões como Ethernet ou Fibra óptica, podemos conectar a um ou mais servidores. Podemos por exemplo, pegar um servidor com 6 discos, utilizarmos dois discos em RAID1 para o sistema operacional e os outros quatro discos em RAID5, para dividirmos em volumes que serão utilizados por nossos servidores. Podemos comprar uma caixa com encaixes para discos que faz exatamente a mesma coisa mas não possui monitor, teclado nem acesso via RDP ou SSH. Em ambos os casos, utilizamos apenas um navegador para nos conectarmos e configurarmos os volumes que serão apresentados aos servidores.

 

Principais tipos

Vamos estudar os três principais tipos encontrados no mercado, que provavelmente você vai se deparar ou vão te oferecer quando pretender adquirir uma storage. É muito importante para um analista saber orientar seu gestor que tem o controle dos investimentos sobre as características de cada tipo, ou ainda melhor, para os gestores desta nova geração em que na maioria das vezes possuem um excelente passado técnico.

DAS

DAS significa Direct Attached Storage, são dispositivos diretamente conectados ao servidor através de USB, e-SATA ou até mesmo Ethernet. É o tipo mais simples, normalmente não oferecem técnicas de proteção a dados exceto alguns modelos que oferecem até RAID mas que geralmente são configurados em RAID0 para oferecerem uma performace melhor pois seu hardware é focado em baixo custo e por isso o desempenho é fraco. Sua aparência na maioria das vezes é como a de um disco externo, um pouco maior de acordo com a quantidade de discos mas existem storages DAS maiores, como storages para racks com 16 ou até mais discos. A comunicação é em nível de arquivo, ou seja, os outros servidores enxergam como um compartilhamento comum na rede.

Para ficar mais claro, veja a topologia abaixo. Repare que as storages DAS estão conectadas diretamente a um servidor ou desktop:

NAS

A storage NAS ou Network Attached Storage é um servidor com a mesma finalidade da DAS conectado a rede ao invés de se conectar diretamente nos servidores. Estes servidores não são desenvolvidos para tarefas computacionais em geral, apesar de tecnicamente ser possível executar outros softwares neles. Geralmente não possuem teclado ou monitor, e são configuradas através de um browser. Os protocolos utilizados pelo NAS são o NFS (popular em sistemas UNIX), ou CIFS/SMB (Common Internet File System/Server Message Block) em ambientes Windows, além do tradicional FTP. Existem alternativas open source para implementações caseiras de NAS, como o FreeNAS, o Openfiler e o NASLite. Apesar de serem soluções caseiras, é comum vermos este tipo de equipamento em empresas e datacenters. Assim como a DAS, a storage NAS também é acessada a nível de arquivo, com a diferença de ser conectada a um switch ao invés de estar conectada diretamente a um servidor como acontece com a DAS e, em algumas vezes, você encontrará um dispositivo desses conectado através de fibra. Neste caso, o hardware todo é mais robusto e a performance bem maior.

SAN

Storage Attached Network é o melhor dos mundos para escalabilidade, disponibilidade, proteção de dados e performance. Utiliza uma rede específica para armazenamento, de fibra ótica (protocolo Fiber Channel) ou par trançado (protocolo iSCSI). A comunicação com os servidores não é mais a nível de arquivo mas sim a nível de blocos (como um HD), o que possibilita que os servidores enxerguem estes volumes como unidades de disco locais, idêntico a um HD interno, por exemplo. Por possuírem uma série de redundâncias (fontes de alimentação, discos, controladoras, etc.) e pelo investimento necessário são utilizadas em ambientes de missão crítica onde a disponibilidade deve ser de 24x7. Existem SAN atualmente que fazem coisas fantásticas com os dados, provendo segurança e performance confiáveis. Estas storages geralmente possuem o tamanho de um rack (embaladas até parecem um rack) ou de vários racks lado a lado.

 

Continuando um restore de onde parou

Durante um processo de restore de uma grande base um outro alguém reiniciou os serviços do SQL. Como resultado, a base ficou em "restoring":

Veja como continuar o restore.

 

Como o restore era de uma base muito grande e portanto demorado, ao invés de iniciar novamente pude continuar de onde parou com a cláusula WITH RESTART. Com isso, conseguimos manter o tempo de restore e deixamos a base online novamente, pronta para receber as conexões:

Segue a query:

RESTORE DATABASE TESTE FROM DISK = 'c:\Backup\teste.bak'
WITH RESTART

 

Quando esta instância foi instalada?

Precisando saber quando o Sqlserver foi instalado, o script abaixo pode ajudar

 

 

SELECT createdate AS [SQL Server Install Date]
FROM sys.syslogins
WHERE [sid] = 0x010100000000000512000000;
Resultado:

Com este pequeno select da tabela sys.syslogins você consegue saber quando o SQL foi instalado no servidor, informação útil muitas vezes.

 

Mostrando o número das linhas no SQL

Quando o SQL exibe uma mensagem de erro dizendo que a sintaxe de uma query está errada na linha 123, como você faz para encontrar esta linha?

Bem simples. Abra o MSSQL Server Management Studio, clique em Tools (ou Ferramentas) e depois em Options:

 

 

Diversas opções podem ser alteradas aqui. Vamos encontrar a que exibe o número das linhas em uma query.

 

 

Veja na figura acima como é fácil. Expanda Text Editor, Transact-SQL e clique em General. No painel do lado direito marque a opção Line numbers e clique em OK. Pronto, era só isso mesmo.

 

 

Além disso, imagine que sua query ou procedure tenha muitas linhas e o erro está na linha 972. Você não vai querer rolar a tela até chegar na linha 972. Utilize o mesmo atalho do Bloco de Notas que te direciona direto pra linha solicitada. Pressione Ctrl+G e veja:

 

Redundant Array of Independent Disks RAID

RAID significa "Redundant Array of Independent Disks" ou conjunto redundante de discos independentes. A diferença para usuários comuns vem na performance muitas pessoas optam por fazer o Raid 0 . No Raid existem vários níveis são eles:

RAID Nível 0

Esse nível também é conhecido como “Striping” ou “Fracionamento”.
No RAID 0 os dados do são divididos em pequenos segmentos e distribuídos entre os diversos discos disponíveis, o que proporciona alta performance na gravação e leitura de informações, porém não oferece redundância, ou seja, não é tolerante a falhas. O aumento da performance no RAID 0 é obtido porque se vários dados fossem gravados em um único disco esse processo aconteceria de forma “Seqüencial” já nesse nível os dados são distribuídos entre os discos ao mesmo tempo.

O RAID 0 pode ser usado para estações de alta performance (CAD, tratamento de imagens e vídeos), porém não é indicado para sistemas de missão-crítica.

RAID Nível 0+1

O RAID 0+1 é uma combinação dos níveis 0 (striping) e 1 (mirroring). No RAID 0+1 os dados são divididos entre os discos e duplicados para os demais discos. Assim temos uma combinação da performance do RAID 0 com a tolerância à falhas do RAID 1. Para a implantação do RAID 0+1 são necessários no mínimo 4 discos o que torna o sistema um pouco caro.
Ao contrario do que muitos pensam, o RAID 0+1 não é o mesmo do RAID 10. Quando um disco falha em RAID 0+1 o sistema se torna basicamente um RAID 0.

O RAID 0+1 pode ser utilizado em estações que necessitam de alta performance com redundância como aplicações CAD e edição de vídeo e áudio.

RAID Nível 1

O nível 1 também é conhecido como "Mirror", “Duplexing” ou “Espelhamento”.
No RAID 1 os dados do são gravados em 2 ou mais discos ao mesmo tempo, oferecendo portanto redundância dos dados e fácil recuperação, com proteção contra falha em disco. Uma característica do RAID 1 é que a gravação de dados é mais lenta, pois é feita duas ou mais vezes. No entanto a leitura é mais rápida, pois o sistema pode acessar duas fontes para a busca das informações.

O RAID 1 pode ser usado para Servidores pelas características de ter uma leitura muito rápida e tolerância à falhas.

RAID Nível 2

O nível 2 também é conhecido como “Monitoring”.
O RAID 2 é direcionado para uso em discos que não possuem detecção de erro de fábrica, pois “adapta” o mecanismo de detecção de falhas em discos rígidos para funcionar em memória.

O RAID 2 é muito pouco usado uma vez que todos discos modernos já possuem de fábrica a detecção de erro.

RAID Nível 3

No RAID 3 os dados são divididos (em nível de bytes) entre os discos enquanto a paridade é gravada em um disco exclusivo. Como todos os bytes tem a sua paridade (acréscimo de 1 bit para identificação de erros) gravada em um disco separado é possível assegurar a integridade dos dados para recuperações necessárias.

O RAID 3 também pode ser utilizado para Servidores e sistemas de missão-critica.

RAID Nível 4

O RAID 4 é muito parecido com o nível 3. A diferença é que além da divisão de dados (em blocos e não bytes) e gravação da paridade em um disco exclusivo esse nível permite que os dados sejam reconstruídos em tempo real utilizando a paridade calculada entre os discos. Além disso a paridade é atualizada a cada gravação, tornado-a muito lenta.

O RAID 4 pode ser utilizado para sistemas que geram arquivos muito grandes como Edição de vídeo, porque a atualização da paridade a cada gravação proporciona maior confiabilidade no armazenamento.

RAID Nível 5

O RAID 5 é semelhante ao nível 4, exceto o fato de que a paridade não é gravada em um disco exclusivo para isso e sim distribuída por todos os discos da matriz. Isso faz com que a gravação de dados seja mais rápida, porque não existe um disco separado do sistema gerando um “Gargalo”, porém como a paridade tem que ser dividida entre os discos a performance é um pouco menor que no RAID 4.

O RAID 5 é amplamente utilizado em Servidores de grandes corporações por oferecer uma performance e confiabilidade muito boa em aplicações não muito pesadas. E normalmente são utilizados 5 discos para aumento da performance.

RAID Nível 6

O RAID 6 é basicamente um RAID 5 porém com dupla paridade.

O RAID 6 pode ser utilizado para sistemas de missão-critica aonde a confiabilidade dos dados é essencial.

RAID Nível 7

No RAID 7 as informações são transmitidas em modo assíncrono e são controladas e cacheadas de maneira independente, obtendo performance altíssima.

O RAID 7 é raramente utilizado pelo custo do Hardware necessário.

RAID Nível 10

O RAID 10 precisa de no mínimo 4 discos rígidos para ser implantado. Os dois primeiros discos trabalham com striping enquanto os outros dois armazenam uma cópia exata dos dois primeiros, mantendo a tolerância à falhas. A diferença básica desse nível para o RAID 0+1 é que sobre certas circunstancias o RAID 10 pode sustentar mais de uma falha simultânea e manter o sistema.

O RAID 10 pode ser utilizado em servidores de banco de dados que necessitem de alta performance e alta tolerância a falhas como em Sistemas Integrados e Bancos