Eu fiz uma análise do código-fonte para server_names_hash_bucket_size
e server_names_hash_max_size
, acho que ele usa o mesmo hash do mapa.
Aí vem uma cópia generalizada da minha resposta :
- A recomendação geral seria manter os dois valores o menor possível.
- Se reclamações do nginx aumentam
max_size
primeiro, desde que se queixem. Se o número exceder um número grande (32769, por exemplo), aumentebucket_size
para múltiplos de valor padrão em sua plataforma, desde que se queixem. Se não reclamar mais, diminuamax_size
desde que não reclame. Agora você tem a melhor configuração para o seu conjunto de chaves (cada conjunto de chaves pode precisar de configuração diferente). - Maior
max_size
significa mais memória consumida (uma vez por funcionário ou servidor, por favor, comente se você souber). - Maior
bucket_size
significa mais ciclos de CPU (para cada consulta de chave) e mais transferências da memória principal para o cache. -
max_size
não está relacionado ao número de chaves diretamente, se o número de chaves duplicar, você pode precisar aumentarmax_size
10 vezes ou até mais para evitar colisões. Se você não pode evitá-los, você tem que aumentarbucket_size
. -
Diz-se que
bucket_size
é aumentado para a próxima potência de dois, a partir do código-fonte que eu julgaria que deveria ser suficiente para torná-lo múltiplo do valor padrão, isso deve manter as transferências em cache ideais. - O tamanho de
bucket_size
depende do tamanho das suas chaves. Se o tamanho médio da chave for de 32 bytes (com sobrecarga de matriz de hash), o aumento debucket_size
a 512 bytes significaria que ele pode acomodar 16 chaves com chave hash de colisão. Isso não é algo que você quer, se a colisão acontecer ele procura linearmente . Você quer ter menos colisões possíveis. - Se você tem
max_size
menor que 10000 e pequenabucket_size
, você pode se deparar com um longo tempo de carregamento porque o nginx tentaria encontrar o tamanho de hash ideal em um loop. - Se você tiver
max_size
maior que 10000, haverá "apenas" 1000 loops realizados antes de reclamar.