Nihao,
Outro dia conversando com meu amigo de Mato Grosso do Sul me lembrei de algumas histórias, foi durante uma consultoria em Campo Grande que fiz o meu eject de Sao Paulo para Jundiaí, que deixem os paulistas lá com o Kassab.
Aliás Campo Grande lembra muito o Kansas , onde fica um dos laboratorios de desenvolvimento do Informix, lá tem muito gado e o povo é friendly, só falta mesmo o Tererê.
Por isto vou postar algumas informacoes de como criar um indice em uma tabela com tipo uns 256GB de dados, vamos pensar grande mesmo!!!
Bom primeiro passo, temos que usar o Informix 11 e precisamos saber qual a carga de I/O que nosso storage suporta, isto pode ser feito atraves da analise do TOPAS (AIX) ou TOP (Linux), imaginemos que num momento de pico nosso storage executa muito bem a leitura de 2GB/Seg, nao me lembro qual a media no meu ambiente, deve ser algo acima disto.
No lado f'isico do banco de dados iremos alocar um dbspace com tamanho de pagina de 16KB para armazenar dados e outro dbspaces com pagina de 16KB para armazenar o indice.
Lembre-se de criar um buffer pool de 16KB tambem, alias lembre-se de configurar 2 arquivos onconfig, uma que sera usado normalmente e outro que sera usado somente na criacao do indice.
Sobre o arquivo onconfig usado na criacao do indice devemos configurar o seguinte:
- Parametros de pre-fetch: ra_pages/ra_threshold, esses parametros sao validos para a instancia, inclusive o Cesar me alertou sobre isto.
Com um valor alto para pre-fetch os dados serao lidos mais rapidamente para a memoria e assim acelera a criacao do indice.
Na minha opniao este parametro deveria ser definido no escopo de buffer pool, pois assim poderiamos ter um pre-fetch agressivo para situacoes especificas.
- Parametros de LRU: os parametros de LRU_MIN e LRU_MAX tambem foram incluidos no parametro de criacao de buffer pool, a ideia 'e colocar valores altos para que a instancia nao entre em contencao de processos background para fazer flush.
- Parametros de Checkpoint: agora o Informix nao bloqueia a instancia durante o checkpoint, mas seria interessante desligar o parametro de checkpoint automatico.
- Area temporaria: procure criar dbspaces temporarios do mesmo tamanho do indice a ser criado, se a tabela for particionada tambem crie dbspaces temporarios de acordo com a quantidade de partitions que voce criar na sua tabela. Nao use filesystem para fazer sort do indice, por exemplo setando a variavel DBSPACETEMP ou DBTEMP para um diretorio, sempre direcione para um dbspace temporario.
- Parametros de PDQ: Procure setar os parametros de paralelismo (DS_*) , por default os valores estao definidos de forma ilimitada, isto pode causar contencao na criacao do indice.
Para a tabela ser criada com 256GB é necessario que o dbspace seja criado com página de 16KB, com isto será possivel criar a tabela com apenas um fragmento, porém a criaçao do indice vai demorar, entao procure particionar a tabela de acordo com alguma regra/coluna especifica de modo que os fragmentos comportem até 64GB.
É claro que não executei a criação de indice de tabelas com 256GB, no meu cenário atual fiz somente com 64GB e o tempo foi legal.
Se tiver algum problema como configurar o PDQ Priority dê uma olhada no site do Cesar (Se nao tiver nenhuma sessao falando de PDQ pode mandar email pra ele!!)
http://www.imartins.com.br/informix/
Agora imaginem que voce nao tenha uma janela de downtime de 6 horas para criar o indice o que voce deve fazer?
Neste caso voce pode clonar seu ambiente para um outro ambiente identico e neste criar o indice, ai com um pouco de bruxaria podemos transportar o indice inteiro para a producao sem ter que fazer rebuild, como ? (onunload/onload)
O onload/onunload permite fazer move de grandes volumes muito parecido com o recurso de transportable tablespace do Oracle, essas ferramentas existem desde a versao 7 e realmente sao muitos boas.
Vou deixar na lista de pendencias um post sobre onload/onunload, como sempre procurei passar o conceito de como criar um indice em um tabela com grande volume de dados, agora o como fazer fica como licao de casa.
Se eu esqueci de algum truque e alguem lembra por favor comentem.
Vagner
Grande Vagner.
ResponderExcluirValeu pelas dicas que agora são para todos os DBA´s Informix.
E o Teréré está sempre à disposição.
João Ricardo Oliveira
Joao,
ResponderExcluirHoje fiquei 40 minutos parado no transito e lembrei que faltam algumas coisas que ajudam na criacao do indice.
Cheguei em casa e nao lembro, coisa de louco, no transito amanha vou tentar lembra!!
É isto mesmo, no transito de Sampa eu tenho o momento de criaçao para criar meus posts :)
Vagner