Esquema de bloqueio da tabela Sybase ASE ideal para a tabela de códigos de referência
-
29-10-2019 - |
Pergunta
Tenho uma tabela de códigos de referência que só será lida durante o uso normal e deve ser atualizada apenas para alterações do produto (mensalmente).
Qual bloqueio de tabela devo usar na instrução de criação de tabela?
Eu estava assumindo ALLPAGES porque isso mantém baixo o número total de bloqueios de leitura que o ASE precisa gerenciar;mas estou recebendo 'conselhos' diferentes de outro desenvolvedor sobre o projeto.
Vejo outras tabelas de referência no banco de dados em questão que usam ALLPAGES;mas eles foram atualizados do 12.5; isso pode ser um resquício do que estava disponível na época.
A tabela não é muito ampla, tem duas colunas de código numérico, uma coluna char (1) e está agrupada nos dois códigos numéricos.
Solução
Eu tenho apenas uma resposta óbvia - execute sp_object_stats primeiro e escolha o esquema de bloqueio.
Outras dicas
If the reference table is only for reading, All-Pages locking is best as it takes least number of locks ( that you said ) and there is no conflict on Shared Locks that the processes acquire while reading data.
Just to give you an additional tip on performance: Always try to use a reference table through a co-related sub-query to take the advantage of sub-query caching. Also remember that sub-query caching takes place only when the sub-query has not been flattened by the optimizer and not converted back into a regular join. The trick to ensure than sub-query is not flattened is to use an aggregate function say max(attr) on the attribute. The max function will just be dummy without any "Group By".