quarta-feira, 27 de abril de 2011

Visualizando e Gerenciandos processos no SQL Server - Parte I

Muitas vezes em minha vida profissional, precisei saber quais processos estavam em execução no banco de dados, pois apesar de não ser DBA, essa verificação já me ajudou a resolver muitos incidentes. Neste artigo vou mostrar como visualizar e gerenciar os processos em execução no SQL Server.


Se você já conhece a procedure SP_WHO2 e sabe o que é cada resultado que ela tráz, poderá prosseguir para o próximo artigo, pois este primeiro é apenas uma introdução a esta procedure.

Para começar, execute o comando abaixo no SQL Server:
sp_who2

Se você tiver permissão de visualizar os processos, o comando acima irá lhe retornar várias linhas, caso contrário, você visualizará apenas os processos que têm permissão para tal. Segue abaixo um exemplo:


A procedure SP_WHO2 mostra todos os processos em execução, visiveis pelo usuário que a executa. Esta procedure busca tais informações das tabelas e views do sistema, tais como sys.sysprocesses, porém "traduzindo" as informações para dados mais legíveis.

Vamos entender o que o resultado desta procedure nos diz:

SPID:
  • System Process Identification, é o número de indentificação do processo. Este número é unico entre os todos os processos em execução no banco de dados e é utilizado para manupular o processo, como por exemplo, finalizá-lo.
Status:
  • Informa o status do processo no momento da verificação. Pode assumir vários valores, mas os mais comuns são:
    • RUNNABLE - Indicando que o processo esta em execução naquele momento.
    • SLEEPING - O processo já foi executado, mas os recursos ainda estão alocados.
    • BACKGROUND - O processo é executado em segundo plano, normalmente uma rotina do próprio SQL Server.
    • SUSPENDED - Indica que o processo foi suspenso, pois esta aguardando a conclusão de uma atividade que não depende do SQL Server, como por exemplo, esperando a escrita de um arquivo de LOG no disco.
Login:
  • O nome do login que iniciou o processo.
HostName:
  • Nome do computador de onde se originou a requisição para a execução do serviço.
BlkBy:
  • Este campo é muito importante para a identificação de DeadLock. Quando um processo está sendo bloqueado por outro, este é exibido no campo BlkBy informando quando SPID do processo que o esta bloqueando. Se não há processo bloqueando este, o campo é preenchido com "."
DBName:
  • Nome da base de dados onde o processo esta sendo executado.
Command:
  • Mostra a ação ou comando sendo executada atualmente. Devido a tratativa que a procedure faz, ela não mostra o comando completo que esta sendo executado, exceto quando este traz o valor AWAITING COMMAND, pois indica que o processo já foi executado e está aguardando um novo comando para executar.
CPUTime:
  • Tempo gasto pela CPU para concluír as requisições solicitadas pelo processo. Este contador pode ser desabilidado pela procedure.
DiskIO:
  • Quantidade de leituras e escritas realizadas pelo processo. Este contador pode ser desabilidado pela rotina em execução.
LastBatch:
  • Data e hora da ultima execução do processo.
ProgramName:
  • Nome do programa que iniciou a conexão com o banco de dados. Neste caso, nem sempre será preenchido, pois a biblioteca de conexão do SQL Server não exige que seja especificado o nome do programa ao se conectar com o banco.
RequestID:
  • Informa o ID do processo que solocitou a execução deste.
Agora que sabemos o que significa cada campo da procedure SP_WHO2, você está apto a ler o segundo artigo, que mostra como gerenciar os processos em execução. Até lá!

Se você ficou com alguma dúvida sobre os assuntos abordados nestes, sinta-se livre para postar um comentário a respeito.


Abs,

Afonso Lage.

terça-feira, 26 de abril de 2011

Entendendo a tecnologia RAID

É vital para qualquer analista ter um conhecimento intermediário na área de infra-estrutura. Não importa se você apenas desenvolve aplicativos, mais cedo ou mais tarde alguém vai te perguntar qual a melhor build de RAID para suportar seu aplicativo, portanto, para não passar vergonha nessa hora, vamos entender do que se trata.


RAID, é um acronimo para Redundant Array of Independent Drives ou, traduzindo, Vetor Redundante de Discos Independentes. Basicamente é uma forma de se ter segurança e performance a um baixo custo.


O principio da utilização é simples: Dois ou mais discos são utilizados para salvar a mesma informação e, dependendo da necessidade, a segurança e/ou a performance serão melhoradas. Se você precisar de segurança, então é necessário pelo menos dois discos para salvar o mesmo dados em ambos os discos, dessa forma, se um apresentar falha, os dados serão lidos apartir do outro disco, lembrando que isto não previne perdas por falhas elétricas ou sistêmicas. Mas se seu servidor precisa de performance, então metade dos dados serão salvos em um disco e o restante no outro, diminuindo assim o tempo de I/O.


A forma como você monta os discos no seu servidor determina o nivel de RAID (RAID 0, RAID 1, RAID 10, etc...). 


É possível fazer a combinação dessas tecnologias, mas quanto maior o nível de segurança e performance, maior o investimento necessário em discos.


Além dos discos, é necessário uma placa controladora RAID, como esta abaixo:




Esta placa é responsável por gerenciar toda a tecnologia RAID, desde a segmentação dos discos até ações como DESFRAGMENTAÇÃO.


Abaixo segue a descrição das construções RAIDs mais utilizadas:


RAID 0:






Também conhecido como RAID Striping, é a implementação onde a informação é dividida em segmentos consecutivos (Strip) e salva nos discos. Neste RAID há um ganho de performance de até 50%, pois a carga é distribuida entre os dicos. Mas também há uma desvantagem, não há confiabilidade, pois caso um dos discos venha a falhar, a informação é perdida.


RAID 1:






Neste modo de RAID a segurança dos dados é visado, pois a mesma informação é gravada em ambos os discos, sendo assim, caso um dos discos venha a falhar, a informação não será perdida. Em contra partida, é necessário um investimento maior na compra dos discos e também há uma perda de performance, pois a informação é grava duas vezes, uma em cada disco.


RAID 5:






É uma alternativa ao RAID 1, mas visando a performance do RAID 0, porém a um custo menor que o RAID 10. A informação é segmentada e distribuida entre todos os discos deste vetor, mas juntamente com a informação, um dado de paridade é salvo. Dado de pariedade é uma espécie de CheckSum e é utilizado para recuperar a informação do seu respectivo segmento, por isso, o dado de pariedade deve ser salvo em um segmento separado. Se um dos discos falhar, a informação contida neste será necessáriamente um segmento do dado salvo, que poderá ser recuperado através do dado de pariedade, ou o próprio dado de pariedade, não sendo necessário a restauração do segmento, pois nenhum dos segmentos pertinentes a este dado de pariedade foi salvo no mesmo disco.
Neste nível de RAID, a leitura é bastante rápida e segura, porém, devido a utilização do dado de paridade, há uma perda de performance na escrita.


RAID 10:






É a utilização dos níveis RAID 1 e RAID 0 em conjunto, visando obter a segurança do RAID 1 e a velocidade do RAID 0. É necessário no mínimo quatro discos e também há tolerância contra falhas de até metade dos discos, desde que não seja um disco e seu respectivo espelho.


Bem pessal, agora vocês sabem o que é RAID e entendem quais são os níveis mais utilizados. Assim como toda analise de capacidade, ou capacity plan, é necessário conhecer a previsão de carga para o servidor e, a partir daí, escolher o melhor nível de RAID, respeitando o orçamento disponível e a segurança desejada.


Se alguém ficou com algum dúvida com relação ao assunto abordado neste artigo ou quiser contribuir com alguma informação, basta comentar.




Abs,


Afonso Lage.

sexta-feira, 22 de abril de 2011

Hello World em Java!



Se você está começando em Java, provavelmente já leu ou viu alguns tutoriais sobre como criar um Hello World utilizando o NetBeans, Eclipse ou outro IDE. De fato a utilização de uma IDE é bastante agradável, porem acho vital, para quem está iniciando em Java, não utilizar uma IDE, pois você não aprende o conceito da aplicação e acaba criando alguns vícios. Neste tutorial vou mostrar como criar um Hello World apenas com um editor de texto e uma linha de comando.


Primeiramente, você precisará saber o básico sobre a lógica de programação, caso ainda não saiba, recomento fortemente aprendê-la primeiro.

Você deverá ter o JDK instalado na sua máquina para poder reproduzir os exemplos abaixo, caso ainda não o tenha, veja aqui como instalá-lo.

Você também precisará de um editor de texto. Pode ser até mesmo o Notepad, mas para estes exemplos utilizarei o Notepad++.

Com tudo pronto, vamos começar. Digite o código abaixo e logo abaixo explicarei o que cada linha faz:
public class OlaMundo{
public static void main(String[] args){
System.out.println(“Hello World!”);
}
}
Na primeira linha temos:
public class OlaMundo{
Estamos declarando uma classe publica chamada OlaMundo. Em Java, o corpo da classe é definido dentro de chaves (“{” para começar e”}” para finalizar a edição do corpo da classe) diferentemente de outras linguagens como por exemplo, Pascal que utiliza as tags “BEGIN” e “END”. Continuando...
public static void main(String[] args){
Neste trecho do código estamos declarando o único método da nossa classe Java, o método Main. Por definição da JVM, toda classe executável em Java deverá ter um método Main, caso contrário, ao tentar executar esta classe, a JVM não encontrará o metodo Main e será lançada uma exceção “Exception in thread “main” java.lang.NoSuchMethodError: main“. Então, basicamente, sempre que você estiver criando uma classe executável, deverá ter, necessariamente, um método exatamente como esse, se não, sua classe não será executada.

Explicando um pouco mais sobre essa linha, temos o tipo de retorno void (vazio). Se você já conhece Pascal ou qualquer outra linguagem de programação que diferencie Métodos de Funções, ficará confuso, já que nestas linguagens a principal diferença entre Funções e Métodos é que Métodos não tem retorno e Funções o tem. Pois bem, em Java, todo os métodos tem, impreterivelmente, um tipo de retorno especificado na declaração do método. No nosso caso, o tipo de retorno é void (vazio). Quando um método tem um tipo de retorno void, isso quer dizer que você não deverá esperar um retorno deste método.

Ainda nesta linha, há entre parênteses, o argumento do nosso método Main. Tal argumento é um vetor do tipo String chamado args. Isso é fácil de ser identificado, pois o tipo de cada variável vem antes do nome da variável e, nesse caso, além do tipo Stringainda temos os colchetes (“[]“), indicando que esta variável é um array.
Finalizando a análise desta linha, temos as chaves (“{” para começar e”}” para finalizar a edição do corpo do método). Assim como a definição do corpo das classes, os métodos também definem seus corpos com chaves.
System.out.println(“Hello World!”);
Esta linha é responsável por imprimir a mais famosa frase para quem está aprendendo qualquer linguagem de programação, o “Hello World!”. Estamos chamando a função println() da classe System.out que é uma classe padrão do Java. Há muito o que falar sobre esta classe, mas como você está apenas começando, basta saber que esta classe é responsável por imprimir a saída (ou “retorno”) da nossa classe.

Toda linha de comando em Java deverá ser finalizada com um ponto e virgula (“;”), caso contrário você obterá um erro de sintaxe quando for compilar sua classe.

}
}
Estas duas ultimas linhas fecham o corpo do método e da classe respectivamente. Observe que não é necessário adicionar ponto e vírgula na definição de classes ou métodos.

Agora que você já sabe o que está fazendo, vamos compilar nossa primeira classe em Java. Salve sua classe em um path qualquer com o nome de OlaMundo.java. Em Java, toda classe pública deverá ser salva em um arquivo. Você não pode ter duas classes publicas no mesmo arquivo. Lembre-se também que o nome do arquivo deverá corresponder com o nome da classe pública, se você alterar o nome da classe para OlaJava, deverá salvar o arquivo como OlaJava.java, caso contrário receberá um erro de compilação.


Abra o prompt do MS-DOS (ou se você estiver usando Linux, abra um console) e digite:

cd <path-onde-salvei-o-arquivo-OlaMundo.java>
javac OlaMundo.java
java OlaMundo
Se você tiver dúvidas, veja como eu fiz e a saída que obtive:





Explicando, o comando JAVAC chama o compilador Java (JAVACompiler) e você passa como parâmetro o nome da classe. Se tudo correr bem, o compilador criará um arquivo .class com o nome da sua classe, neste caso, OlaMundo.class. Ao compilar uma classe Java, o compilador transforma o código em bytecode.


O comando JAVA chama a JVM, passando como parâmetro, o nome da classe que queremos executar. Não passe como parâmetro para a JVM o nome do arquivo (OlaMundo.class), passe o nome da classe, caso contrário, a JVM irá procurar uma classe chamada OlaMundo.class e não OlaMundo. A JVM sabe que você está chamando uma classe publica e que toda classe pública tem seu próprio arquivo, então ela subentende que basta procurar por um arquivo .class com o mesmo nome da classe que você solicito que fosse executada.


Sempre quando estou lendo algum tutorial, apostila ou mesmo um artigo sobre programação, eu não me sinto satisfeito enquanto não faço algumas modificações para ver o resultado. A conselho você a fazer o mesmo. Se você entendeu o que expliquei aqui, será capaz de fazer as seguintes atividades:


Alterar o nome da classe, e;
Alterar a saída do nosso programa.


Talvez até outras coisas mais, mas se você conseguir executar as atividades acima, com certeza, terá absorvido o bastante.


Bem pessoal, é isso. Se tiverem alguma dúvida, dificuldade ou mesmo quiser fazer um comentário, será bem vindo. Prometo responder o mais rápido possível.



Abs,

Afonso Lage.

Integrando o Android SDK ao NetBeans IDE.


O desenvolvimento de aplicações para Android pode ser feito de várias formas, até mesmo em um bloco de notas. Mas se você precisa de agilidade e segurança nos aplicativos que você desenvolve, integre o Android SDK ao NetBeans. Neste artigo vou mostrar como se faz isso, através da instalação de plug-ins.

Antes de mais nada…
Certifique-se que você tem instalado e funcionando:


Instalando o Plug-in NBAndroid:
Primeiramente, vamos adicionar o plug-in responsável por essa integração. Abra o NetBeans, vá em Ferramentas -> Plug-ins:



Clique na aba “Configurações” e, logo após, pressione o botão “Adicionar”:



Será solicitado o endereço onde ficam os plug-ins a serem instalados, bem como o nome dessa fonte. Em “Nome” digite: “Android” e cole isto: “http://kenai.com/downloads/nbandroid/updates.xml” no campo “URL”. Por ultimo pressione” OK”:



Aguarde o NetBeans associar a nova fonte de plug-ins. Agora vá até a aba “Plug-ins disponíveis” e procure o Plug-in “Android”. Caso você não o encontre, clique no botão “Recarregar Catálogo”, pois talvez o NetBeans não o tenha associado ainda. Após selecionar o plug-in Android, clique em “Instalar”:



Uma tela informando quais plug-ins serão instalados aparecerá. Clique em “Próximo” para visualizar os termos no contrato de licenças. Uma vez selecionado “Eu aceito os termos no contrato de todas as licenças”, pressione “Instalar”:



Aguarde o NetBeans baixar e instalar os plug-ins. Dependendo da sua conexão, poderá levar de 1 a 20 minutos:



Caso apareça a seguinte mensagem, informando que alguns plug-ins não estão assinados, clique em “Continuar”:



A instalação deverá começar e, dentro de poucos segundos, você visualizará a tela abaixo:



Clique em “Finalizar” e seu NetBeans já esta pronto para trabalhar em conjunto com o Android SDK. Para verificar se toda a instalação ocorreu com sucesso, pressione CTRL+SHIFT+N na tela principal do NetBeans para abrir o menu de novos projetos. Uma nova categoria deverá estar visível agora:



Clique em “Próximo” e digite um nome qualquer para o seu projeto (partindo do princípio que estamos apenas homologando a instalação dos novos plug-ins) e clique em “Finalizar”:



Aguarde a criação do novo projeto e voilà! Seu ambiente de desenvolvimento está pronto para utilização.
Caso alguém tenha alguma duvida ou não tenha conseguido executar algum dos passos deste, basta comentar que o ajudarei o mais breve possível.


Abs,
Afonso Lage.

Instalando o NetBeans no Windows


Neste artigo vou mostrar passo-a-passo como instalar uma das melhores ferramentas de desenvolvimento, não só para Java, mas para Ruby, C/C++, PHP, J2ME, J2SE, J2EE, Servlets & JSP e muito mais.

Antes de começarmos a instalação, escolha qual versão do NetBeans você deseja instalar. A diferença básica entre as versões são, além do tamanho, plug-ins e add-ons que já vem instalados. Se você instalar a versão mais básica, Java SE (54 MB), poderá tranqüilamente, através da instalação de plug-ins, atualizá-la para a versão Java (214 MB). Veja abaixo a tabela extraída do site oficial do NetBeans e faça o seu download.



Você precisará ter o JDK instalado na sua maquina. Se você ainda não o fez, faça aqui.
Após a conclusão do download do instalador, execute o mesmo e aguarde a tela de boas vindas aparecer. Pressione “Próximo”, marque a opção “Eu aceito os termos no contrato de licença” e clique em próximo. Uma tela como essa deverá aparecer:



Selecione o local onde os arquivos no NetBeans deverão ser instalados. Por padrão é “C:/Arquivo de Programas/NetBeans<versão>”. O instalador do NetBeans deverá ser capaz de detectar automaticamente onde o java está instalado, caso ele não o faça, especifique no campo “JDK™ para o IDE NetBeans”. Após tudo configurado, pressione “Próximo”.



Uma última tela de confirmação exibirá os detalhes da instalação. Caso você queria alterar alguma opção, clique em “Voltar”, do contrário, clique em “Instalar”.



A instalação do NetBeans iniciará e poderá levar alguns minutos, dependendo do seu computador, portanto, aguarde.



A tela acima informa que a instalação foi realizada com sucesso e lhe faz alguns questionamentos. Marcando a primeira opção você permitirá que o NetBeans envie dados anônimos a equipe de desenvolvimento para que eles tenham uma idéia das ferramentas, plug-ins e opções mais utilizadas por você, melhorando a ferramenta cada vez mais. Já a segunda opção é para se registrar junto a Sun (Oracle). Neste caso, você precisará preencher um cadastro e receberá emails informativos sobre novos produtos e serviços da Sun.
Seja qual for sua escolha, clique em “Finalizar”. 

Pronto! Seu NetBeans está pronto para ser utilizado. Um atalho na sua Área de Trabalho foi criado, basta clicar duas vezes no ícone do NetBeans e desenvolver a vontade!
Qualquer duvida ou dificuldade na instalação do NetBeans, sintam-se a vontade para comentar este artigo que lhes responderei o mais breve possível.


Abs,
Afonso Lage.