Os servidores de bancos de dados atuais são frequentemente inundados com uma grande variedade de atividades de banco de dados, vindas muitas vezes de diferentes fontes. DB2 WLM permite monitorar e controlar o trabalho em execução em um sistema de banco de dados. Isso ajudará a maximizar a eficiência e/ou rendimento do sistema, bem como ajudará a atingir os objetivos de desempenho dos negócios. WLM é uma parte essencial do IBM DB2 AESE que está sempre presente e consciente quando um banco de dados DB2 está ativo. Todo o trabalho passa pelo WLM, mesmo que esteja na configuração padrão. Um recurso adicional do WLM é a opção de integrar com o gerenciamento de carga de trabalho do sistema operacional AIX ou Linux, permitindo utilizar as capacidades de ambos conforme necessário.
DB2 Workload Manager pode:
- fornecer as funções e granularidade necessárias para monitorar e controlar adequadamente o trabalho no ambiente de execução do DB2.
- permitir a alocação de recursos críticos entre diferentes partes dos negócios, para ajudar a garantir que os SLAs sejam cumpridos.
- permitir melhor utilização do hardware existente com balanceamento de carga.
- ajudar a detectar e agir automaticamente em relação a instruções fora da norma, antes que possam afetar significativamente o sistema.
- permitir a utilização do ambiente de gerenciamento de carga de trabalho do sistema operacional (AIX e Linux) para ajudar a complementar os recursos de monitoramento e controle do DB2.
As próximas seções irão descrever os conceitos de base do DB2 WLM e alguns dos recursos de monitoramento e de outros tipos disponíveis pelo WLM.
Uma classe de serviço é um dos componentes fundamentais do DB2 WLM. O propósito de uma classe de serviço é definir um ambiente de execução no qual o trabalho em um servidor de dados possa ser executado. Elas funcionam como o ponto primário de designação de recursos, controle e monitoramento para trabalhos sendo executados no DB2. Todo o trabalho submetido por meio de uma conexão do usuário é executado em uma classe de serviço do DB2.
As definições de classes de serviço, assim como todas as definições de objeto do WLM, são armazenadas nos catálogos do DB2 e são lidas para a memória quando o banco de dados inicializa. A configuração do WLM armazenada na memória é a mesma em todas as partições de um ambiente DPF (Database Partitioning Feature).
Há três classes de serviço padrão no DB2:
- SYSDEFAULTUSERCLASS — Toda a atividade do usuário é executada nesta classe de serviço, a menos que outra classe seja especificamente criada.
- SYSDEFAULTMAINTENANCECLASS — Esta classe de serviço é usada para rastrear solicitações internas do DB2 que estão realizando tarefas de administração e manutenção, tais como limpeza de índice assíncrono, dados estatísticos de execução automáticos, reorganização de dados automática e backup automático.
- SYSDEFAULTSYSTEMCLASS — Esta classe de serviço é usada para rastrear tarefas internas do DB2 de nível do sistema que estão realizando trabalho, tais como limpadores de página, pré-buscadores e gravadores de log.
Há dois tipos de classes de serviço, que são organizadas em uma hierarquia de duas camadas:
- Superclasses de serviço são a camada superior de trabalho, e podem ser consideradas entidades lógicas que fornecem atributos comuns ao longo das subclasses de serviço.
- Subclasses de serviço são o local em que as atividades são geralmente executadas. Uma ou mais subclasses podem existir dentro de uma superclasse de serviço, e uma subclasse padrão é criada automaticamente para cada superclasse. Essa subclasse padrão é onde o trabalho mapeado para a superclasse (ou seja, não mapeado diretamente para uma subclasse definida pelo usuário) será executado.
Há várias maneiras de definir priorização e controle de recursos para classes de serviço:
- A prioridade de CPU pode ser controlada de duas maneiras: pelo gerenciamento de carga de trabalho do AIX ou Linux, ou usando a prioridade de agente que pode ser definida em todas as classes de serviço do DB2. A prioridade de agente afeta a configuração de prioridade de agente relativa para agentes em execução naquela classe de serviço.
- A prioridade de pré-busca designa uma prioridade para pré-buscar solicitações, o que afeta a ordem na qual o servidor de dados lida com elas.
- A prioridade de buffer pool influencia a proporção de páginas no buffer pool que foram acessadas por atividades em uma dada classe de serviço.
Uma carga de trabalho identifica o trabalho recebido com base em um conjunto de atributos de conexão definido pelo usuário. Todas as conexões do usuário são mapeadas para uma carga de trabalho do DB2 e, se não existirem definições de carga de trabalho estabelecidas pelo usuário, essas conexões serão mapeadas para a carga de trabalho do usuário padrão (SYSDEFAULTUSERWORKLOAD). Cargas de trabalho identificam quem submeteu o trabalho e o encaminham a uma classe de serviço do DB2 para execução. Conexões são mapeadas para uma carga de trabalho específica quando a conexão é estabelecida, e o mapeamento de conexão é reavaliado em limite da unidade de trabalho conforme necessário.
Os atributos de conexão que podem ser definidos para uma carga de trabalho são:
- nome do aplicativo — caracteres curinga (*) podem ser usados
- identificador de autorização (user, group, rol)
- informações do cliente (client user ID, client applname, client wrkstnname, client accstr), que podem ser definidas por meio de sqleseti ou WLM_SET_CLIENT_INFO — caracteres curinga (*) podem ser usados
- endereço IP
- qualquer combinação desses
Quando uma conexão entra no sistema de banco de dados, os atributos dessa conexão são comparados aos atributos da definição de carga de trabalho do DB2. A conexão será mapeada para a primeira definição de carga de trabalho localizada (procurada na ordem de avaliação especificada) cujos atributos correspondam aos da conexão.
Figura 1 mostra o ambiente do DB2 WLM sem customização do usuário (configurações padrão). Todas as conexões do usuário são mapeadas para a carga de trabalho do usuário padrão, que, por sua vez, é mapeada diretamente para a classe de serviço do usuário padrão. Todas as atividades internas de manutenção são mapeadas diretamente para a classe de serviço de manutenção padrão, e todas as atividades do sistema são mapeadas diretamente para a classe de serviço do sistema padrão.
Figura 1. Ambiente padrão do DB2 WLM
Figura 2 mostra um ambiente customizado do DB2 WLM, com solicitações de diferentes aplicativos sendo mapeadas por cargas de trabalho para classes de serviço específicas. Conexões que não correspondem a uma carga de trabalho específica definida pelo usuário são mapeadas para a carga de trabalho do usuário padrão, que, por sua vez, mapeia suas atividades para a classe de serviço do usuário padrão.
Figura 2. Ambiente customizado do DB2 WLM
Limites oferecem uma maneira automática de monitorar e controlar atividades ou conexões que possam estar agindo de forma prejudicial ou inesperada. Seu propósito principal é manter a estabilidade do sistema. Há diferentes tipos de limites. Alguns monitoram e agem em atividades (tais como uma consulta ou DDL), e outros monitoram e agem em conexões. Alguns são preditivos e reagem antes mesmo que o trabalho seja iniciado, por exemplo, impedindo que uma consulta com um custo estimado (timerons) excessivamente alto seja executada. Outros limites são reativos e monitoram e reagem a diferentes aspectos do trabalho atualmente em execução, como tempo de execução ou consumo de recursos. Outros ainda, os limites de simultaneidade, também de natureza preditiva, monitoram e reagem com base no número de conexões ou atividades ativas sendo executadas. Limites também podem ser aplicados a diferentes domínios, tais como banco de dados, classe de serviço ou carga de trabalho.
Abaixo está uma lista de todos os limites atualmente disponíveis no WLM, agrupados com base no tipo, com uma breve descrição de cada.
Atividade
- ESTIMATEDSQLCOST controla o tamanho de uma atividade DLM que pode ser executada. No tempo de compilação, o otimizador do DB2 gera um custo estimado que é usado por este limite para determinar se uma atividade DLM pode ser executada antes que ela inicie.
Conexão (Agregado)
- TOTALDBPARTITIONCONNECTIONS controla o número de aplicativos que se conectam a uma mesma partição (coordenados).
- TOTALSCPARTITIONCONNECTIONS controla o número de aplicativos designados a uma classe de serviço particular em uma partição. É um limite de enfileiramento.
Atividade (Agregado)
- CONCURRENTWORKLOADACTIVITIES controla o número de atividades simultâneas por ocorrência de carga de trabalho em uma partição que pode ser executado.
- CONCURRENTDBCOORDACTIVITIES controla o número de atividades simultâneas que podem ser executadas em um banco de dados ao longo de todas as partições. É um limite de enfileiramento e é considerado um dos limites mais eficientes, pois foi comprovado que é muito eficiente no controle do consumo de recursos.
Ocorrência de carga de trabalho (Agregado)
- CONCURRENTWORKLOADOCCURRENCES controla o número de ocorrências de carga de trabalho de uma carga específica que podem ser executadas a qualquer momento. Uma ocorrência de carga de trabalho é uma conexão que está associada a uma definição de carga de trabalho. Por exemplo, se a conexão APPLICATIONA for mapeada para WORKLOADA, a conexão APPLICATIONA será considerada uma ocorrência de WORKLOADA.
Atividade
- ACTIVITYTOTALTIME controla o tempo total durante o qual uma atividade pode ser executada, incluindo tempos de espera ou de fila.
- SQLROWSRETURNED controla o número de linhas que podem ser retornadas ao aplicativo por uma atividade.
- CPUTIME e CPUTIMEINSC controlam o tempo de CPU que uma atividade pode consumir ao longo de seu tempo de vida em uma partição.
- SQLTEMPSPACE controla a quantidade de espaço de tabela temporário do sistema que uma atividade pode consumir em uma partição.
- SQLROWSREAD e SQLROWSREADINSC controlam o número de linhas que podem ser lidas por uma atividade durante seu tempo de vida em uma partição.
Atividade (Agregado)
- AGGSQLTEMPSPACE controla o consumo total de uso de espaço de tabela temporário do sistema por atividades em uma classe de serviço por partição de banco de dados.
Conexão
- CONNECTIONIDLETIME controla o período de tempo em que uma conexão pode permanecer inativa.
Diversos
- UOWTOTALTIME controla o período de tempo que o gerenciador do banco de dados permite que uma unidade de trabalho seja executada.
Uma violação de limite ocorre quando o trabalho sendo executado no sistema DB2 faz com que o valor especificado para um limite seja atingido (por exemplo, uma atividade DML com um custo estimado maior que o especificado no limite ESTIMATEDSQLCOST). Quando um limite é violado, se um monitor de eventos THRESHOLDVIOLATIONS tiver sido criado e ativado, um registro é inserido nas tabelas do monitor contendo informações como o nome do limite, quando ele foi violado, qual ação foi tomada e assim por diante.
Além disso, quando um limite é violado, uma das seguintes medidas pode ser tomada. (Observação: algumas destas ações são aplicáveis apenas a alguns tipos de limites.)
- Stop evita que a atividade ou conexão continuem. Isso enviará um sqlcode negativo de volta para o aplicativo, indicando que o limite foi excedido.
- Continue permite que a atividade ou conexão continuem executando. Se usada com o monitor de eventos THRESHOLDVIOLATION, pode ser útil ao tentar descobrir quais valores definir para os limites sem prejudicar o trabalho. Quando o limite é violado, permite-se que a atividade ou conexão continuem, mas as informações coletadas podem ser analisadas posteriormente, ajudando a oferecer insight para decidir se os valores do limite devem ser ajustados ou não.
- Force application está disponível apenas para o limite UOWTOTALTIME. Quando esta ação está especificada e o limite é excedido, o aplicativo será forçado para fora do sistema.
- Remap está disponível apenas para os dois limites "dentro da classe de serviço" (CPUTIMEINSC e SQLROWSREADINSC). Esta ação faz com que a atividade seja remapeada para outra subclasse de serviço dentro da mesma superclasse de serviço. Esta ação pode ser útil para diminuir a prioridade de uma atividade em execução no momento que está consumindo CPU demais ou lendo linhas demais.
- Collect activity data permite coletar informações adicionais sobre a atividade que fez com que o limite fosse violado. Se o monitor de eventos ACTIVITY for criado e ativado, informações tais como texto da instrução, ambiente de compilação e valores dos dados de entrada são coletadas.
Há dois limites do DB2 WLM (CONCURRENTDBCOORDACTIVITIES e TOTALSCPARTITIONCONNECTIONS) que permitem colocar atividades ou conexões excessivas em uma fila.. Em vez de parar a atividade ou conexão e prejudicar a carga de trabalho, ela é colocada em uma fila, na qual espera sua vez de executar. Para o usuário final, a atividade ou conexão parece estar executando. Por isso, os limites de enfileiramento são usados com frequência, especialmente o limite CONCURRENTDBCOORDACTIVIES.
Conjuntos de classes de trabalho e conjuntos de ações de trabalho
Enquanto cargas de trabalho permitem identificar e tratar de forma diferente o trabalho com base em "quem" o submeteu (por meio de atributos de conexão), conjuntos de classes de trabalho e de ações de trabalho permitem identificar e tratar de forma diferente o trabalho com base em seu tipo.
Classes de trabalho são usadas para identificar diferentes tipos de trabalho com base nos seus atributos. Conjuntos de classes de trabalho são formados por uma ou mais classes de trabalho. Exemplos de tipos de trabalho reconhecidos que podem ser identificados incluem READ, WRITE, DML (uma combinação de READ e WRITE), CALL, DDL, LOAD e ALL. Além disso, o trabalho pode ser ainda mais isolado por meio de:
- Custo estimado (em timerons) — válido para classes de trabalho do tipo READ, WRITE, DML, ALL
- Cardinalidade (intervalo estimado de linhas retornadas) — válido para classes de trabalho do tipo READ, WRITE, DML, ALL
- Nome do esquema — válido para classes de trabalho do tipo CALL, ALL
Após o trabalho ter sido identificado usando classes de trabalho e conjuntos de classes de trabalho, ações de trabalho e conjuntos de ações de trabalho podem ser usados para definir o que acontece com o trabalho, realizando uma ação específica nele. Uma ação de trabalho representa uma ação que pode ser aplicada ao trabalho que se encaixa em uma classe de trabalho. Um conjunto de ações de trabalho é um agrupamento de uma ou mais ações de trabalho e pode ser aplicado a atividades em uma superclasse de serviço específica, em uma carga de trabalho ou no banco de dados como um todo. Se um conjunto de ações de trabalho for definido para um banco de dados ou carga de trabalho, há vários tipos de ações que podem ser aplicadas a atividades que se encaixam em uma classe de trabalho, tais como limites de atividades, proibição da execução (impedir que a atividade seja iniciada), coleta de dados de atividade e contagem da atividade. Se o conjunto de ações de trabalho for definido para uma superclasse de serviço, os diferentes tipos de ação que podem ser aplicados a atividades incluem mapeamento de atividades para uma subclasse de serviço, proibição da execução, coleta de dados de atividade ou dados agregados e contagem da atividade.
Figura 3 mostra um dos exemplos mais comuns de como conjuntos de classes de trabalho e de ações de trabalho são usados geralmente. Neste exemplo, todas as atividades mapeadas para a superclasse de serviço "MAIN_SC" passarão pelo conjunto de ações de trabalho da superclasse de serviço (SC_WAS) — exceto as que pertencerem à carga de trabalho MARKETINGAPP. Como MARKETINGAPP mapeia seu trabalho diretamente para a subclasse de serviço MARKETING_SSC, não é afetada pelo conjunto de ações de trabalho SC_WAS — efetivamente efetuando bypass nela. No entanto, todas as pequenas atividades de DML vindas de qualquer um dos "aplicativos de desenvolvimento" serão mapeadas, através do conjunto de ações de trabalho, para a subclasse SMALLQUERY_SSC. Da mesma forma, todas as atividades de DML médias e grandes serão mapeadas para as subclasses MEDQUERY_SSC e LARGEQUERY_SSC respectivamente. Como este exemplo está usando SC_WAS para mapear apenas as atividades de DML, qualquer outro tipo de atividade dos "aplicativos de desenvolvimento" será executado na subclasse de serviço padrão.
Começamos a ver o verdadeiro poder da configuração descrita na Figura 3 ao aplicarmos limites de simultaneidade (por exemplo, CONCURRENTDBCOORDACTIVITIES) às classes de serviço que contêm as atividades de DML grandes. Ao fazer isso, é possível controlar o número de consultas médias e grandes que podem ser executadas simultaneamente, enfileirando o excedente e deixando mais recursos do sistema para as pequenas consultas.
Figura 3. Exemplo de mapeamento de conjunto de ações de trabalho
Integração com o WLM do sistema operacional (AIX, Linux)
DB2 WLM oferece a capacidade opcional de integrar firmemente classes de serviço do DB2 com alguns dos recursos de gerenciamento de carga de trabalho oferecidos pelos sistemas operacionais (OS) AIX ou Linux (kernel 2.6.26 ou superior). Cada classe de serviço do DB2 pode ser associada a uma classe correspondente do OS pela especificação da tag OUTBOUND CORRELATOR ao criar ou alterar uma classe de serviço do DB2. Ao usar essa tag, o DB2 associa automaticamente todos os agentes (encadeamentos) trabalhando na classe de serviço do DB2 à classe de serviço equivalente do OS. Isso permite utilizar os controles de recursos de CPU e as estatísticas de gerenciamento de carga de trabalho oferecidos pelo sistema operacional para ajudar a complementar os fornecidos pelo DB2 WLM.
Um estágio essencial do gerenciamento de carga de trabalho é o monitoramento. No DB2 WLM, os recursos de monitoramento permitem fazer coisas como reconhecer alterações no funcionamento do sistema, realizar drill down para a origem dos problemas e sintonizar o sistema para eficiência ideal. Há dois tipos de informações de monitoramento: tempo real (o que está atualmente em execução em um sistema) e histórico (o que executou no passado). Deve-se notar que tanto o monitoramento em tempo real como o monitoramento histórico descritos abaixo estão disponíveis no produto DB2 básico por meio da configuração padrão do WLM. No entanto, não é possível identificar o que monitorar baseado em objetos do WLM definidos pelo usuário (tais como classes de serviço, cargas de trabalho, etc.) sem uma licença do WLM.
Monitoramento em tempo real usando funções da tabela
Usando as funções da tabela que começam com WLM_ ou MON_, é possível acessar informações em tempo real sobre o trabalho em execução no sistema. Elas podem fornecer métricas para ajudar a determinar padrões de uso e alocação de recursos, identificar áreas de problema e dar uma ideia geral do funcionamento de um servidor de banco de dados DB2. Os dados fornecidos por algumas dessas funções de tabela também podem ser usados como entrada para outras ferramentas de terceiros ou em conjunto com scripts adicionais para análise.
Abaixo estão alguns exemplos de funções de tabela que mostram o trabalho em execução no sistema, dados agregados pelos objetos do DB2 WLM ou informações estatísticas para diferentes objetos:
- WLM_GET_SERVICE_CLASS_WORKLOAD_OCCURRENCES_V97 retorna uma lista de ocorrências de carga de trabalho em partições de banco de dados que são designadas para uma classe de serviço.
- WLM_GET_SERVICE_CLASS_WORKLOAD_OCCURRENCES_V97 retorna uma lista de ocorrências de carga de trabalho em partições de banco de dados que são designadas para uma classe de serviço.
- MON_GET_WORKLOAD retorna métricas para uma ou mais cargas de trabalho.
- MON_GET_SERVICE_SUBCLASS retorna métricas para uma ou mais subclasses de serviço.
- WLM_GET_SERVICE_SUPERCLASS_STATS retorna estatísticas básicas para uma ou mais superclasses de serviço.
Monitoramento histórico usando monitores de eventos
O monitoramento histórico é útil para identificar o que ocorreu em um sistema. Monitores de eventos são criados para coletar informações que podem ser úteis no futuro, ou para análise histórica. Eles não fazem com que eventos sejam gerados — são receptores passivos de eventos. Embora haja muitos monitores de eventos, há três monitores do WLM:
- O monitor de eventos de atividade captura detalhes sobre as atividades individuais em uma classe de serviço, carga de trabalho, classe de trabalho ou atividades que violaram um limite. A quantidade de dados capturados pode ser configurada. Podem ser coletadas informações como identificação do WLM, estatísticas básicas de tempo, texto da instrução, ambiente de compilação e valores de dados.
- O monitor de eventos de violações de limite é usado para capturar informações sobre a atividade ou conexão que fez com que o limite fosse violado. Ele coleta informações como qual foi o limite violado, quando foi violado e a ação tomada.
- O monitor de eventos de estatísticas é usado para capturar informações agregadas de atividades, tais como o número de atividades concluídas e o tempo médio de execução. Dados agregados incluem histogramas para algumas medições de atividades, como médias e desvios padrão. Histogramas podem, por exemplo, dizer quantas atividades em um certo período de tempo foram concluídas em um segundo ou menos, quantas concluíram em até 5 segundos e quantas levaram mais de 5 segundos.
DB2 WLM também oferece muitos outros recursos e funções.
- Estão disponíveis procedimentos armazenados que podem ser usados para cancelar uma atividade, capturar detalhes sobre uma atividade, reconfigurar as estatísticas de objetos DB2 WLM e configurar informações do cliente no servidor de dados.
- Um par de scripts Perl de amostra que, se algumas informações de atividade tiverem sido coletadas, geram informações históricas sobre quais tabelas, índices e colunas foram ou não acessados.
- Um script Perl de amostra para ajudar a facilitar a migração do DB2 Query Patroller, descontinuado, para o DB2 WLM.
DB2 AESE é uma solução de banco de dados abrangente em um único pacote por um preço baixo. Entre o amplo conjunto de recursos e benefícios que ele oferece está o gerenciamento de carga de trabalho. Esse recurso permite que o trabalho no ambiente do DB2 seja controlado e monitorado adequadamente, para ajudar a garantir que recursos críticos sejam alocados para atingir os objetivos de negócios. Para saber mais sobre o DB2 AESE e os recursos que ele oferece, consulte os recursos abaixo.
Aprender
-
Leia o primeiro artigo desta série.
Esse artigo foca no gerenciamento de desempenho e otimização de armazenamento.
-
Leia o segundo artigo desta série.
Esse artigo foca em Q Replication e federação.
-
A documentação do DB2 9.7
contém detalhes técnicos sobre os recursos e capacidades do IBM DB2 AESE.
-
Leia o documento WLM Hands On Tutorial
para outras referências.
-
Encontre os detalhes técnicos do WLM para Linux, Unix e Windows em um IBM Redbook.
-
Leia SAP em DB2 para LUW
para aprender a explorar o WLM em um ambiente SAP.
-
Saiba sobre histogramas do DB2 WLM no Smart Data Administration e-kit.
-
Explore as principais facetas do DB2 para Linux, UNIX e Windows na Série de webcasts sobre IBM DB2 para Profissionais Oracle.
- Confira o
IBM DB2 e-kit for Database Professionals, a página do produto IBM DB2 Workshop para Profissionais Oraclee a unidade Knowledge Path: DB2 Fundamentals for Oracle Professionals.
Obter produtos e tecnologias
- Faça download de uma versão de teste gratuita do DB2 para Linux, UNIX e Windows para experimentá-lo no seu ambiente.
- Crie seu próximo projeto de desenvolvimento com
software de avaliação da IBM, disponível para download diretamente do developerWorks.
Discutir
- Participar do fórum de discussão.
- Confira os blogs do developerWorks e participe da
comunidade do developerWorks.
Karen McCulloch é gerente de desenvolvimento e líder técnica da equipe de desenvolvimento do DB2 Workload Management e também um dos desenvolvedores. Karen teve importante participação no design e desenvolvimento dos recursos DB2 WLM desde sua concepção. Antes de trabalhar em WLM, Karen era líder técnica da ferramenta DB2 Query Patroller. Karen é membro da equipe DB2 desde 2002.