12.5. Bloqueio e índices

Embora o PostgreSQL disponibilize acesso de leitura e escrita não bloqueante aos dados das tabelas, o acesso de leitura e escrita não bloqueante não é fornecido, atualmente, por todos os métodos de acesso de índice implementados pelo PostgreSQL. Os vários tipos de índice são tratados como mostrado a seguir:

Índices B-tree

São utilizados bloqueios no nível de página, compartilhados ou exclusivos, de curta duração, para acesso de leitura/escrita. Os bloqueios são liberados imediatamente após cada linha do índice ser lida ou inserida. Os índices B-tree fornecem a mais alta simultaneidade sem condições de impasse.

Índices GiST e R-tree

São utilizados bloqueios no nível de índice, compartilhados ou exclusivos, para acesso de leitura/escrita. Os bloqueios são liberados após o comando terminar.

Índices hash

São utilizados bloqueios no nível de receptáculo de hash (hash-bucket-level), compartilhados ou exclusivos, para acesso de leitura/escrita. Os bloqueios são liberados após todo o receptáculo ser processado. Os bloqueios no nível de receptáculo fornecem uma simultaneidade melhor que os bloqueios no nível de índice, mas podem ocorrer impasses uma vez que os bloqueios são mantidos por mais tempo que uma operação de índice.

Em resumo, o índice B-tree oferece o melhor desempenho para aplicações simultâneas; uma vez que também possui mais funcionalidades do que o índice hash, é o tipo de índice recomendado para aplicações simultâneas que necessitam indexar dados escalares. Para tratar dados não escalares, os índices B-tree obviamente não podem ser utilizados; nesta situação, os desenvolvedores de aplicativos devem estar cientes do desempenho relativamente pobre dos índices GiST e R-tree.

SourceForge.net Logo CSS válido!