terça-feira, 16 de maio de 2017

onstat–g ath: Mostra informações sobre todos os threads

Utilize o comando onstat –g ath para mostrar informações sobre todos os threads.

Sintaxe:

>> onstat –g ath

Descrição da saída do comando:

tid – ID da thread

tcb – Acesso ao bloco de controle da thread

rstcb – Acesso ao bloco de controle RSAM thread

prty – Prioridade da thread

status – Status da thread

vp-class – Classe do Virtual Processor

name – nome da thread. Para threads que participam em operações de otimização de armazenamento paralelo, o nome da operação e o numero do thread.

  • compress.number = A thread esta compactando dados
  • repack.number = A thread esta reempacotando dados
  • uncompress.number = A thread esta descompactando dados
  • update_ipa.number = A thread esta removendo operações de alterações pendentes

segunda-feira, 15 de maio de 2017

SLES 12–Notas Gerais sobre Tunning do sistema

Estarei postando assim que possível, alguns tópicos sobre Tunning no SLES-12.

O objetivo é discutir como encontrar as razões para problemas de desempenho e fornecer meios para resolver esses problemas. Antes de começar a ajustar o sistema, certifique-se de ter descartado problemas comuns e ter encontrado a causa do problema. Deve-se também ter um plano detalhado sobre como ajustar o sistema, porque a aplicação de dicas de ajuste aleatório muitas vezes não vai ajudar e poderia piorar as coisas.

Abordagem geral ao ajustar um sistema

  1. Especifique o problema que precisa ser resolvido;
  2. Caso a degradação seja nova, identifique quaisquer alterações recentes no sistema;
  3. Identificar por que o problema é considerado um problema de desempenho;
  4. Especifique uma métrica que pode ser usada para analisar o desempenho. Essa métrica pode ser, por exemplo, latência, taxa de transferência, o numero máximo de usuários que estão logados simultaneamente ou o numero máximo de usuários ativos;
  5. Medir o desempenho atual usando a métrica da etapa anterior;
  6. Identificar o subsistema onde o aplicativo esta gastando mais tempo;
  7. Monitorar o sistema e/ou o aplicativo, assim como analisar os dados, categorize onde o tempo esta sendo gasto;
  8. Ajuste o subsistema identificado na etapa anterior;
  9. Reavalie o desempenho atual sem monitoramento usando a mesma métrica como antes;
  10. Se o desempenho ainda não for aceitável, volte a etapa 3 novamente.

Esteja Certo que problema resolver

Antes de começar a ajustar um sistema, tente descrever o problema da forma mais exata possível. Uma declaração como “O sistema é lento!” não é uma descrição útil do problema. Por exemplo, poderia fazer uma diferença se a performance do sistema precisa ser melhorada em geral ou apenas em horário de pico.

Além disso, certifique-se de que você pode aplicar uma medição ao seu problema, caso contrario você não será capaz de verificar se o ajuste foi um sucesso ou não . Você deve sempre ser capaz de comparar “antes” e “depois”. Quais métricas usar depende do cenário ou aplicativo que você esta procurando. As métricas de servidor Web relevantes, por exemplo, poderiam ser expressas em termos de:

Latência

o Tempo para entregar uma página.

Taxa de transferência

Numero de paginas atendidas por segundo ou megabytes transferidos por segundo.

Usuários Ativos

O numero máximo de usuários que podem baixar paginas enquanto ainda estão recebendo paginas dentro de uma latência aceitável.

Eliminar problemas comuns

Um problema de desempenho geralmente é causado por problemas de rede ou hardware, bugs ou problemas de configuração. Certifiques-e de descartar problemas como os listados abaixo antes de tentar ajustar seu sistema:

  • Analise a saída do systemd journal;
  • Analise (usando top ou ps) se um determinado processo se comporta mal por consumir quantidades incomuns de tempo de CPU e memoria.
  • Analise se há problemas de rede /proc/net/dev.
  • Em caso de problemas de I/O com discos físicos, certifique-se de que ele não é causado por problemas de hardware (verifique o disco com o smartmontools).
  • Certifique-se de que os trabalhos em segundo plano estão programados para serem executados em períodos em que a carga do servidor é baixa. Esses trabalhos também devem ser executados com baixa prioridade definida via nice.
  • Se o servidor  executar vários serviços utilizando o mesmos recursos, considere mover serviços para outro servidor.
  • Por ultimo, verifique se o software está atualizado.

Procurando por gargalos

Encontrar gargalos muitas vezes é a parte mais difícil ao ajustar um sistema. O SuSE Enterprise Server, assim como todos os Linux/Unix, oferece muitas ferramentas para ajuda-lo nessa tarefa. Em posts futuros estarei passando mais informações detalhadas sobre as aplicações gerais de monitoramento do sistema e a analise do arquivo de log. Se o problema requer uma analise longa e profunda, o kernel do Linux oferece meios para realizar essa analise, vou estar abordando esse assunto também futuramente.

Depois de ter coletado os dados, ele precisa ser analisado. Primeiro, verifique se o hardware do servidor (memoria, CPU, barramento) e os I/Os (disco, rede) são suficientes. Se essa condição básica forem atendidas, o sistema poderá se beneficiar de um Tuning.

Passo a passo do Tuning

Certifique-se de planejar cuidadosamente o tuning em si. É de vital importância fazer um passo de cada vez. Só fazendo isso você será capaz de medir se a mudança forneceu uma melhoria ou mesmo teve um impacto negativo. Cada atividade de ajuste deve ser medido durante um período de tempo suficiente para garantir que você possa fazer uma analise com base em dados significativos. Se você não pode medir um efeito positivo, não faça mudança permanente. As possibilidades são, que poderia ter um efeito negativo no futuro.

quinta-feira, 11 de maio de 2017

Variável de ambiente PSORT_NPROCS

A variável de ambiente PSORT_NPROCS permite que o servidor de banco de dados melhore o desempenho sorts de processo paralelo alocando mais threads para classificação.

Antes da classificação do pacote do SORT executar em paralelo, verifique se o servidor de banco de dados tem memória suficiente.

>>-setenv--PSORT_NPROCS--threads-------------------------------><

export PSORT_NPROCS=threads

threads

É um numero inteiro, especifica o número máximo de threads a ser usado para classificar uma consulta. Este valor não pode ser maior que 10.

O comando a seguir define PSORT_NPROCS como 4:

setenv PSORT_NPROCS 4

export PSORT_NPROCS=4

Para desativar o SORT em paralelo, digite o seguinte comando:

unsetenv PSORT_NPROCS

Recomenda-se inicialmente definir PSORT_NPROCS como 2 quando o servidor tiver varias CPUs. Se a atividade subsequente da CPU for menor que a atividade de I/O, então pode-se ir aumentando o valor de PSORT_NPROCS.

Nota

Se a variável de ambiente PDQPRIORITY não estiver definida, o servidor de banco de dados aloca a quantidade mínima de memória para o SORT. Essa memória mínima é insuficiente para iniciar até dois segmentos de SORT. Se não estiver definido o PDQPRIORITY, verificar a memória disponível antes de executar uma ordenação em grande escala (como uma criação de índice) para se certificar de que tem memória suficiente.

Technote (Solução de Problemas)

Problema (Resumo)

Você executa o UPDATE STATISTICS e ele falha com os erros 567 e 179. Os erros indicam e que a instância do IDS não tem dbspace temporário suficiente no disco para os arquivos temporários criados durante o sort. No entanto, o espaço ocupado pela tabela no disco é muito menor do que os dados de classificação relatados pelo plano de consulta.

Sintoma:

O comando UPDATE STATISTICS falha retornando os seguinte erros:

567: Cannot write sorted rows.
179: ISAM error: no free disk space for sort

Causa:

Verifique para determinar se você tem uma coluna ou colunas de tipo de dados VARCHAR. O espaço ocupado por dados VARCHAR no disco em um dbspace regular é apenas o espaço necessário para os dados armazenados, Ou o comprimento mínimo do tipo de dados se ele for declarado. No entanto, os dados são expandidos para seu tamanho máximo quando lidos de tablespace no disco dentro da  memória, e esse tamanho é mantido quando os arquivos de sort temporários são gravados em dbspaces temporários. Por exemplo, uma sequência de dois caracteres em um campo varchar (255) ocupará apenas vários bytes no disco. No entanto, quando os dados são lidos na memória, ele vai ocupar o comprimento do campo completo, neste caso a memória requer 255 bytes para armazenar os dados.

Os dados de ordenação reportados no plano de consulta baseiam-se no comprimento total dos dados. No exemplo que segue, a tabela ocupa 31.9 MB no disco e a instância foi configurada com 80MB de espaço temporário, no entanto o UPDATE STATISTICS falhou com os erros 567 e 179. O otimizador calculou a classificação dos dados em 127.5 MB. A tabela tinha um campo VARCHAR(255) e dois campos CHAR(10). Os comprimentos de sequencia no campo VARCHAR variaram de um a seis bytes, ocupando assim muito menos do que no máximo de 255 bytes no disco.

Table: informix.tab1

Mode: HIGH

Number of Bins:      267     Bin size     5000

Sort data   127.5 MB Sort memory granted    15.0 MB

Estimated number of table scans 3

PASS #1 col1

PASS #2 col2

PASS #3 col3

Resolvendo o problema
  • aumentar a memória disponível para o SORT. Isso também deve diminuir o tempo necessário para que as estatísticas de atualização sejam concluídas.
  • aumentar o dbspace temporário.
  • Altere as estatísticas de atualização para que classifique menos dados.Por exemplo, alterne entre os UPDATE STATISTCS HIGH e UPDATE STATISTICS MEDIUM.
  • Diminua o comprimento máximo do tipo de dados VARCHAR.

 

Link de origem: http://www-01.ibm.com/support/docview.wss?uid=swg21358640

sábado, 1 de abril de 2017

Shell Script para pesquisar e limpar codigos hexadecimais em arquivos textos

#!/bin/bash
# Creditos:
#    Amilcar de Jesus Moreti
#    AJM SOLUTIONS    
#    amilcar@ajmsolutions.com.br
#
#    Ronaldo Guizo
#     PAINCO
#     ronaldo@paico.com.br
#
#    Local:
#     /usr/local/bin/clean2.sh
#
#     Script desenvolvido para realizar alteracao em arquivos textos
#     que contenham codificação Hexa;
#
#     Data Criacao = 28/03/2017 - Data Modificacao = 01/04/2017
#    
#     Versao = 1   -       Release = 03
#
#-----------------------------------------------------------
#         .      .                                                           #
#       .  .:::.                                                            #
#       :(o o):  .                                                       #
#ooO--(_)--Ooo---------BY           __                   #
#                                          _ '_   (    / _/'     _      #
#                                         (////) __)()((///()/)_)    #
#                                          _/                              #
#-----------------------------------------------------------

# Variaveis Ambiente
dirUnl="/archive/dbExport/logix.exp"
codHex="bd be 80 81 82 83 86 87 92 93 94 95 96 8d 8e 9a 9d"
fileSol="$dirUnl/solucao.txt"
fileFinal="$dirUnl/arqCorreto.txt"
extFile="*.unl"

cat /dev/null > $fileSol

cd $dirUnl
for i in ${codHex}
do
    echo "Procurando pelo codigo Hexa $i"
    grep -P -n "\x$i" $extFile |awk -F: '{print $1, $2}' |uniq >> $fileSol 2> /dev/null
done
cat $fileSol |sort -o $fileSol
cat $fileSol |uniq > $fileFinal

for x in $(cat $fileFinal | awk '{print $1}' | uniq)
do
    for line in $(cat $fileFinal |grep $x | awk '{print $2}')
    do
        echo "Alterando a linha $line do arquivo $x"
        sed -i ''$line's/.\xbd/I/g' $x
        sed -i ''$line's/.\xbe/I/g' $x
        sed -i ''$line's/.\x8d/I/g' $x
        sed -i ''$line's/.\x8e/A/g' $x
        sed -i ''$line's/.\x80/C/g' $x
        sed -i ''$line's/.\x81//g' $x
         sed -i ''$line's/.\x82/e/g' $x
         sed -i ''$line's/.\x83/a/g' $x
         sed -i ''$line's/.\x86//g' $x
         sed -i ''$line's/.\x87/C/g' $x
        sed -i ''$line's/.\x9a/U/g' $x
        sed -i ''$line's/.\x9d/C/g' $x
         sed -i ''$line's/.\x92//g' $x
         sed -i ''$line's/.\x93/"/g' $x
         sed -i ''$line's/.\x94/"/g' $x
         sed -i ''$line's/.\x95//g' $x
         sed -i ''$line's/.\x96/-/g' $x
        echo ""
    done
done

sexta-feira, 10 de fevereiro de 2017

Alocando poll threads para uma combinação de interface/protocolo com o parâmetro de configuração NETTYPE

O parâmetro de configuração NETTYPE configura threads de pesquisa para cada tipo de conexão que suporta a instância do servidor de banco de dados. Você pode usar esse parâmetro de configuração para alocar mais de um segmento de pesquisa para uma combinação de interface/protocolo.
Defina o parâmetro de configuração NETTYPE da seguinte maneira: 
  1. Especifique SQLI, drtlitcp ou drsoctcp como o protocolo de conexão.
  2. Adicione informações sobre o número de segmentos de pesquisa, O número de conexões e a classe de processador virtual.
For example, specify:


NETTYPE drtlitcp,3,2,CPU 


Uma entrada NETTYPE pode manipular vários aliases de servidor de banco de dados no mesmo tipo de protocolo. Assim, quando DRDA® está em uso, O segmento de rede (nettype drtlitcp ou drsoctcp) geralmente tem pelo menos dois soquetes aberto e ouvindo conexões. Um socket está aberto para conexões SQLI e outro está aberto para conexões DRDA. Sockets adicionais podem estar abertos se muitos aliases de servidor separados estiverem configurados.

DRDA - Configurando o Informix para conexões com IBM Data Server Clients

Você deve ter instalado um IBM® Data Server Client e o driver aplicável. 
Este tópico explica como configurar o IBM Informix® para conexões com clientes do IBM Data Server. 
Para configurar o Informix para se conectar a um IBM Data Server Client: 
    Configure um novo server alias no arquivo sqlhosts ou no registro do Windows, usando o protocolo de conexão drtlitcp ou drsoctcp. Especifique informações em um dos seguintes formatos:

    server_name  drtlitcp machine_name service name/portnumber
    server_name  drsoctcp machine_name service name/portnumber
    
    
    Por exemplo, para uma nova entrada de arquivo sqlhosts para uma conexão DRDA®, especifique:
    ajm_dr drtlitcp ajmhost 9502

    Se você estiver definindo entradas SQLHOSTS para o Gerenciador de Conexões, inclua entradas para o protocolo de conexão drtlitcp ou drsoctcp, conforme mostrado na lista a seguir:
    ajm_primary   onsoctcp   ajmserver  ajmsrv
    ajm_hdr       onsoctcp   ajmhdr     ajmhdrsrv
    ajm_sds       onsoctcp   ajmsds     ajmsdssrv
    ajm_dr        drsoctcp   ajmdr      ajmdrsrv
    ajm_hdr_dr    drsoctcp   ajmhdr     ajmhdrsrv
    ajm_sds_dr    drsoctcp   ajmsds     ajmsdssrv
     
Verifique se o arquivo onconfig lista a conexão DRDA como um dos aliases de servidor. O alias não deve ser o DBSERVERNAME.
 
Use o DRDA para se conectar ao servidor.
Se você receber o erro-23104 ao acessar o servidor através do protocolo DRDA, o aplicativo cliente pode estar tentando vincular um valor que tenha uma codificação diferente da página de código ou conjunto de códigos da localidade do banco de dados. Defina a variável de ambiente GL_USEGLU como 1 antes de iniciar a instância do Informix. Isso permite que o servidor inicialize os conversores Unicode apropriados que são necessários para manipular as conversões de conjunto de códigos.

Visão geral do DRDA

Distributed Relational Database Architecture ™ (DRDA®) é um conjunto de protocolos que permitem a comunicação entre aplicativos e sistemas de banco de dados em diferentes plataformas e permite que dados relacionais sejam distribuídos entre várias plataformas.

Qualquer combinação de produtos de gerenciamento de banco de dados relacional que usam DRDA pode ser conectada para formar um sistema de gerenciamento de banco de dados relacional distribuído. O DRDA coordena a comunicação entre sistemas, definindo o que deve ser trocado e como ele deve ser trocado.


Você pode configurar o IBM® Informix® para usar o DRDA para responder às solicitações de uma API comum (por exemplo, do IBM Data Server JDBC Driver e do IBM Data Server .NET Provider).
  
Você também pode habilitar conexões DRDA entre uma API cliente e o Gerenciador de Conexões Informix (o utilitário oncmsm) que gerencia e redireciona as solicitações de conexão do cliente entre um servidor primário e um ou mais servidores secundários. O Gerenciador de Conexões fornece recursos de recuperação automática e balanceamento de carga. Quando um cliente faz uma solicitação para se conectar a um servidor, o Connection Manager roteia a solicitação de conexão para o servidor apropriado com base em uma configuração de nível de serviço. Você pode configurar o Gerenciador de Conexões para trocar automaticamente para servidores específicos ou para tipos específicos de servidores. Para obter mais informações sobre o Gerenciador de Conexões e instruções para configurá-lo, consulte  Manage cluster connections with the Connection Manager.

Enterprise Replication, replicação de dados e utilitários Informix, como DB-Access, requerem conexões SQLI. Os utilitários Enterprise Replication não operam através de conexões DRDA. No entanto, as ligações Enterprise Replication podem coexistir com ligações DRDA.
  
A comunicação entre uma API comum e o Informix pode usar segurança de senha criptografada ou um ID de usuário criptografado e segurança de senha criptografada.
  
Você pode usar o protocolo Secure Sockets Layer (SSL) para criptografar dados em conexões end-to-end TCP / IP e DRDA seguras entre o Informix e uma API comum de cliente. Para obter informações sobre SSL, consulte o IBM Informix Security Guide.