Duvida/Curiosidade Sobre Banco de Dados Grande!

Ae pessoal, gostaria de saber o que vcs fazem para melhorar a performace de um banco de dados grande ?
Se vcs usam alguma tecnica para driblar esse problema ou deixa o proprio SGBD é cuidar disso … fiquei comigo aqui pensando alguma tecnica interessante apos pegar um banco “medio” usando postgresql (7.4) ele tem 3,4G, mais existe tabelas dentro dele que tem bastante itens!

Sei que o manuseio dessas informações no sistema é de grande valia…

Gostaria de alguns depoimento de vcs…

t+


Editado:
tamanho:
( 255mb dump com tar.gz)
( 3,4G sem compactacao )

Considero um banco com 255 MB pequeno visto que estou acostumado a ver uma única tabela ocupando vários GB.

No Oracle costuma-se particionar a tabela por chaves lógicas, mas isso só é feito pra tabelas realmente grandes que são comuns em DataWareHouse.

250 mb ele zipado com tar.gz

mais nao sei se ele é um banco grande grande grande… mais que eu acho grandinho acho !
negocio é que o SGBD é o postgresql, eu acho ele bom, e no caso o fato de ser livre ta falando mais alto!

fazer algo do tipo, usar 2 banco de dados, um com dados mais recentes digamos que de 6 meses e um outro banco com os dados mais antigos e ao final de semana rolar um script que faça esse trabalho de passar de um banco para o outro… isso existe? ou vcs usam mesmo uma super maquina e deixa la todo o banco … sao coisas assim que eu queria saber!!!

[quote=sudeval]250 mb ele zipado com tar.gz
negocio é que o SGBD é o postgresql, eu acho ele bom, e no caso o fato de ser livre ta falando mais alto![/quote]

Claro que é bom!

Na maioria da vezes entre um 10g Express Edition e Postgres ou MySQL tendo a escolher os Open Source;

[quote=sudeval]Ae pessoal, gostaria de saber o que vcs fazem para melhorar a performace de um banco de dados grande ?
Se vcs usam alguma tecnica para driblar esse problema ou deixa o proprio SGBD é cuidar disso … fiquei comigo aqui pensando alguma tecnica interessante apos pegar um banco “medio” usando postgresql (7.4) ele tem uns 255mb, mais existe tabelas dentro dele que tem bastante itens!

Sei que o manuseio dessas informações no sistema é de grande valia…

Gostaria de alguns depoimento de vcs…

t+
[/quote]

Nao sei onde eu li, mas parece q o Postgresql nas versoes 7.x tem um bug de performance, e foi melhorado bastante nas versões 8.x principalmente na 8.2

Da uma conferida no site do postgresql :wink:

nao sei se seria util pra voce, mas voce ja leu algo sobre bancos distribuidos? como ja falaram, pode particionar os dados (horizontalmente e verticalmente), mesmo que voce nao va usar é interessante ler…

mas 255mb não é tão grande… entao acho que um banco com indices certos e consultas afinadas ja pode te ajudar…

255 MB cabe dentro de um pen drive. Se você está com problemas de desempenho em um banco tão pequeno, então veja se você está com problemas de índices inadequados ou inexistentes ou queries mal-feitas.

Como eu havia dito antes o tamanho do banco acima, era de um dump zipado com o tar.gz, fui ver o tamanho real dele que é 3,4G… ainda nao sei se é um banco grande ou não para vcs, na verdade meu interesse maior é saber como que vocês trabalham para resolver problemas com bancos grandes…

tipo como amigo falou
felipecruz

vou dar uma pesquisada sobre isso.

cado

sim, infelizmente é o 7.4.7 :frowning: depois vou ver a possibilidade de uma migração para o 8.1 ja que uso o debian e essa é a versão estavel ainda nele.

Se vc esta usando linux entao provavelmente seja problema na versão mesmo. Tbm estou com Debian, a versao 8.2 está na experimental.

então a maioria de vcs nao tem nenhum segredo pra agilizar a perfomace do SGBD ne, o mesmo trata de cuidar dessa questão de perfomace!!! (tirando query bem feitas, e indexes… )

na realidade minha curiosidade era essa… se tinha algumas “taticas” para melhorar

Para melhorar a performance de um BD, depende do ambiente em que ele esta instalado, do tipo de utilização, da frequência de utilização, das tabelas e constraints do seu banco de dados, do tamanho das queries, do formato dos dados, etc…

Não existe nenhuma receita de bolo e genérica para fazer tuning das configs do postgresql, nem da criação de índices, nem da melhoria de queries…

Você terá que analisar o uso do seu BD como um todo e a cada query verificar o seu retorno e o seu plano de execução.

Uma dica não faça tuning e melhorias em queries até que você perceba um gargalo naquele ponto…

Mas o que houve com o teu banco ? Com o crescimento ele tem ficado exageradamente lento ?
Além de tudo o que o flávio falou, que realmente é muito importante, mais especificamente no caso do PostgreSQL, você tem usado o VACUUM ??

Verdade VACUUM é fundamental nas ultimas versões do postgresql o vacuum pode ser agendado e feito automaticamente. Unica ressalva que eu faço qto a isso que se vc tiver acesso 24x7 com picos de uso diferentes a cada dia que alguem execute o VACUUM manualmente e não agendado, por que ele concorre com as sessões no acesso a tabelas, o que pode “travar” o acesso a determinadas tabelas durante um tempo, no meu caso isso é crucial visto que alguns segundos a mais pode inviabilizar uma pesquisa.

[quote=flaleite]Você terá que analisar o uso do seu BD como um todo e a cada query verificar o seu retorno e o seu plano de execução.

Uma dica não faça tuning e melhorias em queries até que você perceba um gargalo naquele ponto…[/quote]
vlw! tenho o problema de ainda nao saber especificamente onde está o problema, então vou ter que conseguir algo generico até descobrir o gargalho.

[quote=lucao]Mas o que houve com o teu banco ? Com o crescimento ele tem ficado exageradamente lento ?
Além de tudo o que o flávio falou, que realmente é muito importante, mais especificamente no caso do PostgreSQL, você tem usado o VACUUM ??[/quote]
na verdade tenho peguei a pouco tempo o problema, mais pelas reclamações (cliente) tenho percebido que é basicamente isso mesmo.

Ainda ontem, tive dado umas pesquisadas e vi alguns comentários sobre o VACUUM, até o momento eu não sabia o real uso dele(ele funciona como um gargabe collection ?), então fui dar uma olhada no postgresql.conf e vi que as configurações dele la estão praticamente default.
no 7.4.7 ja tem o auto-vacuum ? ( no 8.1 eu achei, mais no 7.4.7 não)
no arquivo de configuração as unicas linhas que estão descomentadas e com valor são:

tcpip_socket = true syslog = 0 silent_mode = false log_connections = true log_pid = true log_timestamp = true stats_start_collector = true stats_row_level = true datestyle = 'ISO,European' dynamic_library_path = '/usr/share/postgresql:/usr/lib/postgresql:/usr/lib/postgresql/lib'
ou seja nem se fala do auto-vacuum ou de vacuum.
a unica linha que fala algo sobre vacuum é

#vacuum_mem = 8192		# min 1024, size in KB

24 x 7 ( seria 24h 7 dias da semana ? ) não, la é de segunda a sabado (08 as 19:30)
nao acredito ter um dia que tenha um grande aumento em relacao aos demais, mais pode ter um determinado horario no dia que tenha um uso maior, tipo proximo as 17h.

tem como me dar so um toque sobre quando vc disse que ele concorre com o acesso as sessoes das tabelas ?

t+
agradeço a todos ! conversa ta legal :slight_smile:

Na versão 7.4.X acho que não tem auto-vacuum, só nas versões 8.1.X e 8.2.X.

Primeiro veja como dar um vacuum na mão usando o psql. Ou baixe o PGAdmin e de seu terminal acesse o BD e faça o vacuum. Como isso é a primeira vez que vai fazer, faça isso fora do horario do expediente ou em um momento que não tenha ninguem acessando o BD.

Caso não vá migrar o postgresql para uma versão mais nova, vc pode agendar na crontab a execução do vacuum num horario fora do expediente (isso no caso do linux) ou usar um programinha de agendamento (no caso de Windows).

estou pensando em migrar quando a versão 8.2 ficar no stable (ou backports) pra mim !

vou dar uma analisado de como funcionada o vacuum, quanto as opções pra mim seria melhorar fazer na mão e colocar no cron. :slight_smile:

mais antes tenho que entender como que ele funciona…
( tem com dar um resumosinho de basicamente o que ele faz ? )
t+

http://www.postgresql.org/docs/current/static/routine-vacuuming.html

vlw! to vendo que ele é realmente um grande passo !

[quote=RodrigoSol]Considero um banco com 255 MB pequeno visto que estou acostumado a ver uma única tabela ocupando vários GB.

No Oracle costuma-se particionar a tabela por chaves lógicas, mas isso só é feito pra tabelas realmente grandes que são comuns em DataWareHouse.

[/quote]

Pois é, banco com 255MB é minusculo, da até pra usar Prevayler :smiley:

Banco grande pra Oracle deve passar dos 70GB por ai (chute).

]['s

3,4G, mais pelo visto ainda está pequeno…

eu uso ejb 2.0 e jboss, agorinha me deparei com um probleminha, passou 8segundos para inserir uma linha em uma determinada tabela de 373733 linhas. ( detalhe essa tabela nao tem indice, é apenas para gravar uns logs ). no banco eu fiz o explain de um insert nela e ele me retornou

Result (cost=0.00..0.01 rows=1 width=0) (actual time=0.007..0.008 rows=1 loops=1) Total runtime: 0.180 ms
ou seja ta ok, acho que o jboss com o ejb ta brigando com algo na hora de criar.

UserLogLocal ull = userLogHome.create(userLogValue);

nesse momento ae ele passa os 8s :frowning: