Atribuir consultas a filas
Com o Amazon Redshift, é possível gerenciar a simultaneidade de workloads e priorizar as consultas atribuindo-as a filas. As filas permitem que você aloque recursos, como memória e CPU, a diferentes tipos de consulta ou usuário, garantindo que as consultas essenciais sejam priorizadas em detrimento das menos importantes. As seções a seguir descrevem como criar filas, configurar suas propriedades e atribuir consultas de entrada com base em critérios definidos por você.
Os exemplos a seguir atribuem consultas a filas de acordo com perfis de usuário, grupos de usuários e grupos de consultas.
Atribuir consultas a filas com base em perfis de usuário
Se um usuário for atribuído a um perfil e esse perfil estiver anexado a uma fila, as consultas executadas por esse usuário serão atribuídas a essa fila. O exemplo a seguir cria um perfil de usuário chamado sales_rw
e atribui o usuário test_user
a esse perfil.
create role sales_rw; grant role sales_rw to test_user;
Você também pode combinar permissões de dois perfis ao conceder explicitamente um perfil a outro. A atribuição de um perfil aninhado a um usuário concede as permissões de ambos os perfis ao usuário.
create role sales_rw; create role sales_ro; grant role sales_ro to role sales_rw; grant role sales_rw to test_user;
Para ver a lista de usuários que receberam perfis no cluster, consulte a tabela SVV_USER_GRANTS. Para ver a lista de perfis que receberam perfis no cluster, consulte a tabela SVV_ROLE_GRANTS.
select * from svv_user_grants; select * from svv_role_grants;
Atribuir consultas a filas com base em grupos de usuários
Se o nome de um grupo de usuários estiver listado em uma definição de fila, as consultas executadas por membros desse grupo de usuários são atribuídas à fila correspondente. O exemplo a seguir cria grupos de usuários e adiciona usuários a grupos usando os comandos SQL CRIAR USUÁRIO, CREATE GROUP e ALTER GROUP.
create group admin_group with user admin246, admin135, sec555; create user vp1234 in group ad_hoc_group password 'vpPass1234'; alter group admin_group add user analyst44, analyst45, analyst46;
Atribuir uma consulta a um grupo de consultas
É possível atribuir uma consulta a uma fila no tempo de execução atribuindo a consulta ao grupo de consultas apropriado. Use o comando SET para iniciar um grupo de consultas.
SET query_group TO
group_label
Aqui,
é um rótulo de grupo de consulta listado na configuração do WLM.group_label
Todas as consultas executadas depois do comando SET query_group
são executadas como membros do grupo de consultas especificado até você redefinir o grupo de consultas ou encerrar a sessão de login atual. Para obter informações sobre como definir e redefinir objetos do Amazon Redshift, consulte SET e RESET na Referência de comandos SQL.
Os rótulos do grupo de consultas especificados devem ser incluídos na configuração do WLM atual; do contrário, o comando SET query_group não afeta filas de consultas.
O rótulo definido na cláusula TO é capturado nos logs de consulta, de maneira que você possa usá-lo na solução de problemas. Para obter informações sobre o parâmetro de configuração query_group, consulte query_group na Referência de configuração.
O exemplo a seguir executa duas consultas como parte de 'priority' do grupo de consultas e redefine o grupo de consultas.
set query_group to 'priority'; select count(*)from stv_blocklist; select query, elapsed, substring from svl_qlog order by query desc limit 5; reset query_group;
Atribuir consultas à fila de superusuários
Para atribuir uma consulta à fila de superusuário, faça logon no Amazon Redshift como superusuário e execute a consulta no grupo de superusuário. Quando você tiver terminado, redefina o grupo de consultas, de maneira que as consultas subsequentes não sejam executadas na fila de superusuários.
O exemplo a seguir atribui dois comandos a serem executados na fila de superusuários.
set query_group to 'superuser'; analyze; vacuum; reset query_group;
Para exibir uma lista de superusuários, consulte a tabela de catálogo do sistema PG_USER.
select * from pg_user where usesuper = 'true';