sábado, 5 de outubro de 2024

Explorando o Comando bc no Linux

 O comando bc (Basic Calculator) é uma ferramenta poderosa no Linux para realizar cálculos matemáticos com precisão arbitrária. Ele pode ser usado tanto de forma interativa quanto em scripts. Neste artigo, vamos explorar desde os exemplos mais básicos até os mais avançados.


Exemplos Básicos

1. Operações Aritméticas Simples

O bc pode ser usado para realizar operações aritméticas básicas como adição, subtração, multiplicação e divisão.


echo "12 + 5" | bc

# Saída: 17


echo "10 - 3" | bc

# Saída: 7


echo "4 * 7" | bc

# Saída: 28


echo "20 / 4" | bc

# Saída: 5


2. Uso de Variáveis

Você pode armazenar resultados em variáveis para uso posterior.


x=$(echo "12 + 5" | bc)

echo $x

# Saída: 17


3. Operações com Decimais

Para trabalhar com números decimais, você pode definir a escala (número de casas decimais).


echo "scale=2; 5 / 3" | bc

# Saída: 1.66


Exemplos Intermediários

1. Operadores de Incremento e Decremento

O bc suporta operadores de incremento (++var) e decremento (--var).


echo "var=10; ++var" | bc

# Saída: 11


echo "var=10; var++" | bc

# Saída: 10 (incrementa após a operação)


2. Operadores de Comparação

Você pode usar operadores de comparação para verificar condições.


echo "5 > 3" | bc

# Saída: 1 (verdadeiro)


echo "5 < 3" | bc

# Saída: 0 (falso)


3. Funções Matemáticas

O bc inclui várias funções matemáticas, como seno, cosseno e exponenciação.


echo "scale=4; s(1)" | bc -l

# Saída: 0.8415 (seno de 1 radiano)


echo "scale=4; e(1)" | bc -l

# Saída: 2.7182 (exponencial de 1)


Exemplos Avançados

1. Scripts com bc

Você pode criar scripts complexos usando bc para cálculos avançados.


echo "define f(x) { return x^3 + 2*x^2 + x + 1 } ; f(3)" | bc

# Saída: 49


2. Loops e Condicionais

O bc permite o uso de loops e condicionais para cálculos iterativos.


echo "for (i=0; i<5; i++) i^2" | bc

# Saída: 0 1 4 9 16


echo "if (5 > 3) 1 else 0" | bc

# Saída: 1


3. Conversão de Bases

Você pode converter números entre diferentes bases, como decimal para hexadecimal.


echo "obase=16; 255" | bc

# Saída: FF


echo "ibase=16; FF" | bc

# Saída: 255


Conclusão

O comando bc é uma ferramenta versátil e poderosa para cálculos matemáticos no Linux. Desde operações básicas até scripts complexos, ele oferece uma ampla gama de funcionalidades que podem ser extremamente úteis para desenvolvedores e administradores de sistemas. Experimente os exemplos acima e explore ainda mais as capacidades do bc!

sexta-feira, 4 de outubro de 2024

Raw Tables - Informix

Introdução

No mundo dos bancos de dados, a eficiência e a segurança dos dados são cruciais. O Informix, um sistema de gerenciamento de banco de dados da IBM, oferece diferentes tipos de tabelas para atender a diversas necessidades. Entre elas, as RAW TABLES se destacam por suas características específicas de não registro de operações. Neste artigo, exploraremos o que são RAW TABLES, suas vantagens, limitações e casos de uso.

O que são RAW TABLES?

As RAW TABLES são tabelas permanentes que não registram operações de inserção, atualização ou exclusão. Isso significa que as operações realizadas nessas tabelas não são registradas nos logs de transação do banco de dados. Essa característica as torna semelhantes às tabelas em um banco de dados sem registro.

Vantagens das RAW TABLES

  1. Desempenho Melhorado: Como as operações não são registradas, as RAW TABLES podem oferecer um desempenho superior em comparação com tabelas que registram todas as transações. Isso é particularmente útil durante a carga inicial de grandes volumes de dados.
  2. Simplicidade na Carga de Dados: As RAW TABLES são ideais para a carga e validação inicial de dados. Utilitários de carga, como dbexport, LOAD statement do DB-Access, ou o High-Performance Loader (HPL) em modo expresso, podem ser usados para carregar dados nessas tabelas.

Limitações das RAW TABLES

  1. Falta de Recuperabilidade: Como as operações não são registradas, não é possível recuperar dados de RAW TABLES em caso de falha, a menos que um backup de nível 0 tenha sido realizado após a última atualização.
  2. Restrições de Uso: Não é possível definir restrições de chave primária, chave única ou referencial em RAW TABLES. Além disso, essas tabelas não devem ser usadas dentro de transações.
  3. Incompatibilidade com Replicação: As RAW TABLES não são compatíveis com a replicação de dados e têm restrições em ambientes de cluster de alta disponibilidade.


Casos de Uso

As RAW TABLES são mais adequadas para cenários onde a carga inicial de dados é crítica e o desempenho é uma prioridade e também em procedures onde normalmente essas cargas são diarias. Após a carga e validação dos dados, é recomendável alterar a tabela para o tipo STANDARD e realizar um backup de nível 0 antes de usá-la em transações.

Exemplo de INSERT INTO em RAW TABLE

Vamos considerar um exemplo prático de como inserir dados em uma RAW TABLE. Suponha que temos uma PROCEDURE onde vamos atualizar essa RAW TABLE  constantemente  chamada raw_data com a seguinte estrutura:

  • Criar a tabela na PROC, onde ela será permanente.

CREATE RAW TABLE  IF NOT EXISTS raw_data (

id SERIAL,

name VARCHAR(50),

value INTEGER

);

  • Limpar os dados da tabela, toda vez que a PROC rodar:
TRUNCATE raw_data 

  • Para inserir dados nessa tabela, você pode usar o comando INSERT INTO da seguinte forma:

INSERT INTO raw_data (name, value) VALUES ('Exemplo', 123); ou

INSERT INTO raw_data (name, value)

SELECT name, value

FROM source_data; 

Este comando insere uma nova linha na tabela raw_data com os valores especificados para as colunas name e value.

Conclusão

As RAW TABLES no Informix oferecem uma solução eficiente para a carga inicial de dados, proporcionando um desempenho superior devido à ausência de registro de operações. No entanto, é importante estar ciente de suas limitações e usá-las adequadamente para garantir a integridade e a segurança dos dados. 

 


sábado, 28 de setembro de 2024

Comandos Linux: explorando memória virtual com vmstat


 Uma visão detalhada do comando vmstat, sua sintaxe básica e como usá-lo.

Há muitos comandos, ferramentas e variações dos dois para você colocar em prática quando se trata de estatísticas do sistema no Linux. No entanto, se você precisa de detalhes sobre memória virtual, usar o vmstat é uma ótima opção.

O que é?

O Virtual Memory Statistics Reporter, também conhecido como vmstat, é uma ferramenta de linha de comando do Linux que relata vários bits de informações do sistema. O VMSTAT relata informações sobre processos, memória, paginação, bloco de I/O, traps, discos e atividade da CPU.

Ao executar o vmstat, tenha em mente que as informações são uma média  solicitadas desde o momento da última reinicialização. Relatórios subsequentes usam medições de atraso e contagem. Eu abordo esses especificamente durante a discussão de sintaxe.

Sintaxe do comando

A sintaxe do comando vmstat é bem simples:

$ vmstat [option][delay [count]]

Opções

delay - O delay entre a atualização em segundos. Se o delay não é especificado,  um relatório é impresso com os valores médios desde a última inicialização.

count - Números de atualizações. Na ausência de count, quando o delay é definido, o padrão é infinito.

-a, --active

Exibe a memória ativa ou inativa. 

-f, --forks

O -f exibe o número de foros desde a inicialização. Isso inclui as sytem calls, fork, vfork e é equivalente ao número total de tarefas criadas. Cada processos é representado por uma ou mais tarefas, dependendo do uso do thread. Esta tela não se repete.

-m, --slabs

Exibe o slabinfo.

-n, --one-header

 Exibe o cabeçalho apenas uma vez e não periodicamente.

-s, --stats

Mostra uma tabela de vários contadores de eventos e estatísticas de memória. Esta tela não se repete. 

-d, --disk

Relatório de estatísticas de disco.

-D, --disk-sum

Relata algumas estatísticas resumidas sobre a atividade do disco 

-p, --partition device 

Estatísticas detalhadas sobre as partições.

-s, --unit character 

Altera a saida entre 1000 (k), 1024 (K), 1000000 (m), ou 1048576 (M) bytes. Observe que isso não altera os campos do swap (si/so) ou block (bi/bo).

-t, --timestamp

 Adiciona timestamp para cada linha

-w, --wide

Modo de saída amplo (útil para sistema com maior quantidade de memória, onde o modo de saída padrão sofre de quebra de coluna indesejada). A saída é mais larga que 80 caracteres por linha.

-y, --no-first

 Omite o primeiro relatório com estatísticas desde a inicialização do sistema.

-V, --version

Mostra informação sobre a versão e sai.

-h, --help

 Mostra ajuda e sai.  

Saída básica e como entendê-la:

A forma mais básica deste comando não usa nenhuma opção. Aqui está a saída padrão e como lê-la:



Você vê informações sobre processos, memória, swap, IO, sistema e CPU. A página man para o comando declara o seguinte (man vmstat):

  • procs
    • r: Número de processos em execução (run queue)
    • b: Número de processos em espera (blocked)
  • memory (são afetados pela opção --unit)
    • swpd: Quantidade de memória virtual usada
    • free: Memória livre.
    • buff: Memória usada como buffer
    • cache: Memória usada como cache
    • inact: a quantidade de memória inativa. (opção -a)
    • active: a quantidade de memória ativa. (opção -a)
  • swap (são afetados pela opção --unit)
    • si: Quantidade de memória trocada do disco para a RAM (/s).
    • so: Quantidade de memória trocada da RAM para o disco (/s).
  • io
    • bi: Blocos recebidos do dispositivo de bloco (disco) (KiB/s)
    • bo: Blocos enviados para o dispositivo de bloco. (KiB/s)
  • system
    • in: número de interrupções por segundo, incluindo o clock
    • cs: número de alteração de contexto por segundo
  • cpu (Essas são porcentagens do tempo total da CPU)
    • us: tempo gasto executando código não-kernel. (Tempo do usuário, incluindo tempos bons)
    • sy: tempo gasto executando o código do kernel. (tempo do sistema)
    • id: tempo gasto ocioso. Antes do Linux 2.5.41, isso inclui o tempo io-wait.
    • wa: tempo gasto esperando por I/O. 
    • st: tempo roubado de uma máquina virtual. Antes do Linux 2.6.11, desconhecido.
    • gu: tempo gasto rodando codigo do KVM guest.

Descrição do campo para o modo disco

  • Reads
    • total: total de leituras completadas com sucesso
    • merged: leituras agrupadas (resultando em um I/O)
    • sectors: leituras de setor com sucesso
    • ms: milissegundos gasto com leituras
  • Writes
    • total: total de escritas completadas com sucesso
    • merged: escritas agrupadas (resultando em um I/O)
    • sectors: leituras de setor com sucesso
    • ms: milissegundos gasto com escrita
  • IO
    • cur: I/O em progresso
    • s: segundos gastos com I/O

Descrição de campos para modo de partições de disco

    • reads: numero total de leituras para essa partição
    • read sectors: total de setor lidos para essa partição
    • writes: numero total de escrita para essa partição
    • requested writes: numero total de requisição de escrita para a partição

Descrição de campos para o modo SLAB

O modo slab mostra estatísticas por slab, para obter mais informações sobre essas informações, consulte Slabinfo (5)

    • cache: nome do cache
    • num: numeros concorrentes de objetos ativos
    • total: números totais de objetos disponíveis
    • size: tamanho de cada objeto
    • pages: numero de paginas com pelo menos um objeto ativo

Notas

vmstat requer acesso de leitura para os arquivos abaixo de /proc. O -m requer acesso de leitura a /proc/slabinfo, que pode não estar disponível para usuários padrão. Opções de montagem para /proc, como sub-SET = PID, também podem afetar o que é visível.

Identificação de Gargalos

Para identificar gargalos, observe as seguintes situações:

  1. CPU:
    1. Se us e sy estão altos, a CPU está sobrecarregada.
    2. Se wa está alto, há um gargalo de I/O.
  2. Memória:
    1. Se free está baixo e si/so estão altos, há falta de memória física, causando troca excessiva (swap).
  3. Disco:
    1. Se bi e bo estão altos, há muita atividade de disco, indicando um possível gargalo de I/O.