SISTEMA DE MONITORAMENTO E IDENTIFICAÇÃO DE PROBLEMAS EM BANCOS DE DADOS BASEADO EM CASOS Guilherme Cruz <[email protected]> Fabiana Lorenzi <[email protected]> – Orientador Universidade Luterana do Brasil (Ulbra) – Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas – Câmpus Canoas Av. Farroupilha, 8.001 – Bairro São José – CEP 92425-900 – Canoas – RS 30 de novembro de 2011 RESUMO Este artigo apresenta o desenvolvimento de um Sistema de Recomendação Baseado em Casos (SRBC) que tem como objetivo realizar o monitoramento de Sistemas Gerenciadores de Banco de Dados Relacional (SGBDR) a fim de identificar possíveis problemas de desempenho. Através da coleta constante de informações específicas do SGBDR, o sistema torna-se uma ferramenta de grande utilidade para o administrador de banco de dados (DBA). Os resultados obtidos atenderam as expectativas no momento em que o usuário definiu o sistema como pró-ativo após a sua utilização. Palavras-chave: Sistemas de Recomendação Baseados em Casos; Sistemas Gerenciadores de Bancos de Dados; Administrador de Banco de Dados. ABSTRACT Title: “Case-based Monitoring System and Identification of Database Problems” This paper presents the development of a Case-Based Reasoning Recommender System (CBR-RS) which aims to carry out the monitoring of Relational Database Management Systems (RDBMS) in order to identify potential performance problems. By collecting specific information contained in the RDBMS, the system becomes a very useful tool for the database administrator (DBA). The results met the expectations at the time the user has defined the system as pro-active after use. Key-words: Case-Based Reasoning Recommender System; Relational Database Management Systems; Database Administrator. 1 INTRODUÇÃO O armazenamento de informações assumiu uma importância vital na economia contemporânea. Para a maioria das empresas, o crescimento financeiro está diretamente relacionado à capacidade e a habilidade de administrar sistemas e bases de dados, uma vez que a tecnologia da informação tornou-se o alicerce de toda a indústria. Nesse cenário, os bancos de dados emergem como um recurso de alta criticidade. “Banco de dados é uma coleção ordenada de dados, a qual é normalmente armazenada em um ou mais arquivos associados. Os dados são estruturados em tabelas, onde referências cruzadas entre tabelas são possíveis. A existência de tais relações entre tabelas leva um banco de dados a ser denominado banco de dados relacional.” (KOFLER, 2005, p. 3). A administração de um banco de dados relacional, por sua vez, é realizada através de Sistemas Gerenciadores de Banco de Dados Relacional (SGBDR), softwares que possibilitam a estruturação, manutenção e monitoramento da coleção de dados. O responsável por administrar o SGBDR é denominado administrador de banco de dados (Database Administrator, DBA). Dentre as funções administrativas de um DBA estão a criação e manutenção de usuários, tabelas e suas respectivas relações, dispositivos de armazenamento e, principalmente, o monitoramento e aperfeiçoamento do desempenho do banco de dados. Para monitorar o desempenho de um SGBDR é necessária a realização de consultas à base de dados utilizando a linguagem SQL (FORTA, 2004). Existem ferramentas próprias das empresas desenvolvedoras dos SGBDR, que oferecem diversas opções de monitoramento, porém muitas consultas são realizadas manualmente pelo DBA a fim de verificar informações específicas do desempenho do banco. Assim, o trabalho de um administrador de banco de dados torna-se repetitivo no momento em que o monitoramento 1 deve ser constante, principalmente para bancos que suportam sistemas críticos, além de ser dependente do comprometimento do DBA em realizar as consultas de forma pontual e analisar corretamente os resultados. Com a motivação de auxiliar o DBA na identificação de possíveis problemas de desempenho, este trabalho apresenta como solução um sistema que utiliza a abordagem de Raciocínio Baseado em Casos (RBC) para monitorar o SGBDR através de consultas pré-definidas pelo usuário. Pela interface do sistema, o DBA poderá definir as informações a serem coletadas que irão representar os casos, podendo criar regras de monitoramento para áreas específicas do banco. Este artigo está organizado da seguinte forma: a seção 2 apresenta referências teóricas, a seção 3 descreve o desenvolvimento dos processos do ciclo do RBC e a seção 4 apresenta a implementação do sistema proposto. As seções 5 e 6 representam, respectivamente, a etapa de validação do sistema e a conclusão deste artigo. 2 REFERENCIAL TEÓRICO Esta seção descreve as fundamentações teóricas que constituem este trabalho, trazendo como referências a abordagem de Raciocínio Baseado em Casos (RBC) e Sistemas Gerenciadores de Banco de Dados Relacional (SGBDR). 2.1 Raciocínio Baseado em Casos Segundo NILSSON (1998), a Inteligência Artificial pode ser definida como o estudo e a aplicação de técnicas e métodos baseados no comportamento inteligente de seres humanos e outros animais para resolver problemas através de sistemas computacionais. O Raciocínio Baseado em Casos (RBC) surge como uma abordagem ao modelo de aprendizagem humana, que utiliza a experiência de situações já vivenciadas, e ainda presentes em memória, para solucionar problemas complexos. O RBC é fundamentalmente diferente, em muitos aspectos, de outras abordagens principais da IA. Ao invés de depender exclusivamente do conhecimento geral de um domínio do problema, ou de descrições, suposições e conclusões, o RBC utiliza o conhecimento específico de experiências passadas (situações concretas). Um novo problema é resolvido encontrando casos passados semelhantes e reutilizando-os na nova situação. Outra importante diferença é que o RBC possui um processo de incremento e aprendizagem, uma vez que uma nova experiência é armazenada toda vez que um problema for solucionado, estando imediatamente disponível para problemas futuros (AAMODT e PLAZA, 1994). Na terminologia do RBC, um caso representa uma situação de problema. Uma experiência passada, que foi capturada e absorvida de uma maneira que possa ser reutilizada na resolução de problemas futuros, é denominada de caso passado, caso anterior, caso armazenado ou caso retido. Consequentemente, um novo caso ou um caso não-resolvido é a descrição de um novo problema a ser solucionado. Sendo assim, o raciocínio baseado em casos é um conjunto de processos cíclicos e integrados de resolução de problema, aprendizagem dessa experiência e resolução de novos problemas. Conforme apresentado por AAMODT e PLAZA (1994), o ciclo do RBC, representado na Figura 1, é composto por quatro fases: Recuperação, Reutilização, Revisão e Retenção. Uma primeira descrição de um problema define um novo caso. Este novo caso é utilizado para recuperar um caso da coleção de casos anteriores. O caso recuperado é combinado com o novo caso, através da reutilização, em um caso resolvido, ou seja, uma proposta de solução para o problema inicial. Através do processo de revisão, é testado o sucesso da solução. Durante a retenção, a experiência útil é retida para futura reutilização, e a base é, então, atualizada por um novo caso aprendido, ou por modificação de alguns casos já existentes. 2 Figura 1- Ciclo do RBC Para que seja iniciado o ciclo RBC, porém, é necessário que se completem alguns pré-requisitos. Dentre eles, exige especial atenção a representação dos casos, uma vez que o caso é a entrada e saída de todos os processos do ciclo. 2.1.1 Aquisição de Conhecimento Aquisição de conhecimento é o processo o qual coleta e modela conhecimento para um sistema especialista, e pode ser realizado através de técnicas como entrevistas estruturadas ou narrativas, entrevistas centralizadas ao problema, bem como através de discussão em grupo, observação e questionários (SCHMALHOFER, STRUBE e WETTER, 1992). Esta etapa é considerada por muitos autores como o ponto que define o sucesso ou o insucesso do ciclo do RBC, uma vez que todas as informações pertinentes devem ser coletadas. Caso contrário, os casos, que desempenham no ciclo papel-chave, estarão representados de maneira incompleta. Para adquirir o conhecimento pertinente, porém, é necessário o envolvimento de um especialista da área referenciada pelo ciclo. Utilizam-se, assim, as técnicas de aquisição de conhecimento. Através das informações obtidas desses processos é, então, definida a representação dos casos. 2.1.2 Representação dos Casos Em KOLODNER (1991), é descrito o papel que os casos podem desempenhar para ajudar as pessoas a tomar decisões e o conteúdo que os casos devem ter para auxiliar nessa questão fundamental. A autora não comenta sobre a forma que um caso deve tomar, mas foca nos tipos de coisas que devem ser representadas em um caso para que ele possa ser produtivamente utilizado para o raciocínio. Os casos devem conter a descrição de uma situação de problema, a solução que foi proposta e o resultado obtido, bem como se esteve perto ou não do que era esperado. 2.1.3 Indexação e Recuperação dos Casos Índices são estruturas de dados que podem ser armazenadas em outras estruturas para que possam ser pesquisadas rapidamente (DEHNE, 1993). Indexação de casos envolve relacionar índices a casos para facilitar o processo de recuperação. Recuperação é a utilização de técnicas de busca para pesquisar a base de casos com o objetivo de encontrar casos passados que apresentem semelhança ou níveis de similaridade com o novo caso. Neste trabalho será utilizado o algoritmo de vizinho mais próximo. Conforme COPPING (2004), o algoritmo de vizinho mais próximo é uma abordagem de busca que seleciona experiências com base na distância geométrica entre instâncias de um mesmo espaço. 2.1.4 Reutilização e Revisão dos Casos Reutilização é o processo do ciclo do RBC que tem por objetivo apresentar uma solução para um novo problema através de soluções de casos passados. A apresentação de uma nova solução, porém, é obrigatoriamente antecedida pelo processo de recuperação do caso, uma vez que ela é definida pela solução presente no caso passado recuperado. Sendo assim, a experiência do caso passado é relacionada ao novo 3 problema (AAMOD e PLAZA, 1994). O processo de reutilização pode ser realizado através da atribuição da solução recuperada no caso passado, sem que haja modificações, à solução do novo caso. Essa técnica é comumente aplicada para atividades de classificação, onde é provável que cada solução seja representada frequentemente na base de casos e, sendo assim, o caso mais semelhante recuperado, se for considerado suficientemente similar, tem grande probabilidade de conter a solução apropriada. A reutilização pode se tornar complicada, entretanto, se houverem diferenças significativas entre o caso recuperado e o novo problema. Em situações como essa, uma adaptação pode ser necessária (KOLODNER, 1993). Uma vez finalizada a reutilização, o processo de revisão é então iniciado. Durante essa etapa, a solução proposta ao novo problema é avaliada e pode sofrer modificações (AAMOD e PLAZA, 1994). Essa fase é considerada por alguns autores como o período de aprendizagem com as falhas. Sendo assim, a revisão permite o ajuste da solução recuperada à solução do novo problema. Técnicas de revisão podem ser aplicadas e gerar regras, heranças ou conhecimento de domínio. 2.1.5 Retenção dos Casos A retenção é apresentada como o passo final ao ciclo do RBC, e é nele que o resultado do último processo de solução de caso é incluído na base de conhecimento do sistema. O caso revisado é armazenado com as características do problema e a solução encontrada, assumindo implicitamente que o resultado obteve sucesso (AAMOD e PLAZA, 1994). Existem, entretanto, diversas questões relacionadas a melhores práticas de aprendizagem com um novo caso e a como diferentes sistemas podem armazenar diferentes tipos de informações em seus casos. Quando o critério para o sucesso ou não de um caso é complexo, os casos devem incluir informações adicionais sobre a resolução do problema e sobre o cenário que caracterizou o problema. 2.2 Sistemas Gerenciadores de Banco de Dados Relacional O modelo relacional de dados surgiu oficialmente com a publicação do artigo “Um Modelo Relacional de Dados para Grandes Bancos de Dados Compartilhados” (CODD, 1970). Depois de publicado, o estudo proposto foi aceito e definido como o modelo para bancos de dados relacionais. Com base no artigo de Codd, é apresentado, no ano de 1976, pelo engenheiro de software Peter Chen, um novo modelo relacional denominado Modelo Entidade-Relacionamento (ER), sendo o mais popular e utilizado até os dias de hoje. Segundo CHEN (1976), o modelo ER é definido por quatro termos chave, sendo eles: entidades, relacionamentos, atributos e domínios. A estrutura básica do seu modelo relacional é a tabela (representando uma entidade), onde as informações são estruturadas em linhas e colunas. Os relacionamentos, por sua vez, são as referências existentes entre as entidades. As colunas têm o papel de enumerar os vários atributos da entidade e as linhas são instâncias da entidade. Como resultado, a linha de uma tabela de empregados, por exemplo, representa um único empregado. No entanto, todas as entidades em um banco de dados relacional seguem algumas premissas básicas (BRYLA, 2004). Primeiro, a ordem das colunas em uma tabela é irrelevante. Segundo, não podem existir linhas idênticas em uma mesma tabela. E por terceiro, a linha de uma tabela pode conter um único valor para cada um de seus atributos. Adicionalmente, cada tabela pode ou não conter uma coluna denominada chave primária, que servirá como identificador único de cada linha da tabela. Para compor o relacionamento entre tabelas, utilizam-se chaves estrangeiras. 2.2.1 Relacionamentos Os relacionamentos entre entidades podem ocorrer entre duas ou mais tabelas, através de chaves estrangeiras, sendo o binário o mais comum deles. A cardinalidade de uma relação indica quantas instâncias de uma entidade podem ser relacionadas a uma instância de outra entidade. A cardinalidade no modelo ER expressa o número de ocorrências de uma entidade em relação à outra. Os relacionamentos mais comuns entre entidades são um-para-um, um-para-muitos e muitos-para-muitos. As propriedades de cada relacionamento são as seguintes (OSBORNE e MORTON, 2010): • Um-para-um: Neste tipo de relacionamento, uma instancia de uma entidade só pode estar relacionada à outra única instancia da outra entidade. Por exemplo, uma pessoa pode possuir 4 apenas um único número de registro geral (RG), e cada RG pode pertencer a somente uma única pessoa. • Um-para-muitos: Neste caso, cada instancia de uma entidade, está relacionada com diversas instâncias da outra entidade. Exemplificando, uma pessoa pode alugar diversos livros de uma biblioteca, mas cada livro pode ser alugado por uma única pessoa por vez. • Muitos-para-muitos: Nesta situação, cada instância da entidade A, por exemplo, está relacionada a muitas instâncias da entidade B e, ao mesmo tempo, uma instância da entidade B está relacionada a diversas instâncias da entidade A. Tomando como exemplo, um desenvolvedor de uma empresa de software pode fazer parte de muitos projetos, e cada projeto pode utilizar diversos desenvolvedores. 2.2.2 Estrutura Atualmente, existem diversas empresas desenvolvedoras de sistemas gerenciadores de banco de dados relacional. Dentre elas, podemos destacar a Oracle, com os produtos Oracle e MySQL, e a Microsoft com o SQL Server. Em ambas, seus produtos possuem as mesmas estruturas básicas, como arquivos de armazenamento, tabelas e agrupamentos de tabelas, usuários e esquemas. Um importante detalhe, entretanto, caracteriza-se pelo fato de que as mais relevantes informações de desempenho do SGBDR, em tempo real e históricas, são armazenadas em tabelas do próprio banco de dados, estando disponíveis para consulta pelo administrador de banco de dados. 2.2.3 Linguagem A linguagem de acesso e manipulação de dados de um SGBDR é a Structured Query Language (SQL), traduzida como linguagem de acesso estruturada. O propósito da SQL é simplesmente prover uma interface ao banco de dados. Toda instrução é considerada um comando. A linguagem SQL difere de outras linguagens de programação como C e Java, que tendem a processar dados em conjuntos, e não em linhas individuais. Outra característica é que ela não requer instruções de como navegar até os dados – isso acontece de forma transparente para o usuário (OSBORNE e MORTON, 2010). Existem diferenças em como as empresas desenvolvedoras dos SGBDR implementam as funcionalidades da SQL, embora as técnicas aprendidas pelo usuário em um banco de dados vão se transferir para outros. A base de toda linguagem SQL é composta pelos comandos select, insert, update e delete, utilizados para consultar, inserir, atualizar e remover registros, respectivamente. 3 DESENVOLVIMENTO DO CICLO DO RBC Esta seção descreve o desenvolvimento deste sistema em relação ao ciclo do raciocínio baseado em casos, e organiza-se de forma a facilitar o entendimento, uma vez que todas as etapas são dependentes de etapas anteriores, iniciando com a aquisição de conhecimento. 3.1 Aquisição de Conhecimento A aquisição de conhecimento é o item base para o desenvolvimento de um sistema que utiliza o raciocínio baseado em casos. Através dela, são coletadas as informações que irão definir a representação dos casos e a forma como serão manipuladas. O levantamento dos dados ocorreu através de questionário e entrevista com o especialista na área de SGBDR, um dos administradores de banco de dados de uma empresa multinacional. 3.1.1 Questionários Foram apresentados ao especialista dois questionários com diferentes abordagens. No primeiro, utilizaram-se apenas perguntas relativas às atividades realizadas pelo DBA, com o objetivo de entender as responsabilidades e funções de seu dia-a-dia. O segundo questionário, por sua vez, visou levantar os detalhes sobre os dados coletados e técnicas utilizadas por ele para verificar o desempenho do banco de dados e identificar possíveis problemas. Em ambos os questionários, ficou evidente a importância de uma tarefa realizada pelo DBA: a execução de consultas personalizadas com base no comportamento da aplicação que aquele determinado banco de dados suporta. Cada aplicação da empresa é desenvolvida com objetivos específicos de negócio. 5 Algumas são utilizadas como sistemas gerenciadores de vendas, por exemplo, responsáveis por armazenar e atualizar uma grande quantidade de dados. Em contrapartida, outros sistemas executam consultas complexas que envolvem cruzamentos e operações de ordenação entre os dados sem a necessidade de inserir informações na base de dados, consumindo, entretanto, boa parte dos recursos do SGBDR, como sistemas geradores de relatórios. Assim, os mais prováveis problemas de desempenho em um SGDBR estão relacionados à maneira como o sistema suportado manipula a coleção de dados. Algumas aplicações realizam processos com utilização de paralelismo, gerando excessos de carga e concorrência. Outras executam, ao mesmo tempo, variados processos de inserção, atualização e deleção de dados, os chamados comandos DML (Data Manipulation Language), que muitas vezes acabam por paralisar uns aos outros, no momento que compartilham os mesmos recursos. 3.1.2 Entrevista Através dos dados presentes nos questionários foi possível analisar e identificar os tópicos mais importantes sobre o assunto, para que informações mais detalhadas pudessem ser coletadas através de uma conversa com o especialista. Assim, foi organizada uma entrevista semi-estruturada com base nos seguintes tópicos: • Como as ferramentas de monitoramento próprias das empresas desenvolvedoras dos SDGBR poderiam ser mais úteis? • Pessoa ou equipe responsável e conhecimento necessário para construir as consultas personalizadas. • Tipos de dados retornados nas consultas. • Frequência de execução das consultas. • Número necessário de consultas para verificar e identificar problemas em nível de desempenho do SGDBR. • Armazenamento da solução encontrada para um problema de desempenho. • Protótipo de representação de um caso. 3.2 Representação dos Casos Para um sistema que objetiva realizar o monitoramento e a identificação de problemas em SGBDR, uma representação de caso é um artefato capaz de descrever o nível de desempenho do banco de dados em um determinado momento e os atributos que constituem tal definição. Com as respostas obtidas através da entrevista ficou clara, porém, a necessidade de flexibilidade na representação dos casos. Para cada problema específico a ser verificado, um diferente número de atributos podem ser necessários. Em resumo, os atributos do caso, em sua grande maioria, são representados pelas consultas SQL e o usuário do sistema deve, assim, ser capaz de criar inúmeras representações de casos. Além da variação na quantidade de atributos, outra questão extremamente importante foi levantada pelo especialista quando se referindo a atribuição de nível de desempenho aos casos. Todo o caso coletado do SGBDR necessita ter um atributo que informe a caracterização ou não de um problema concreto ou a caracterização de apenas um aviso. Segundo ele, o valor deste atributo deve ser preenchido ou revisado pelo usuário, uma vez que o banco de dados fornece apenas as informações de desempenho, não sendo capaz de relacioná-las a problemas passados. Dessa forma, tanto casos novos quanto casos passados possuem um atributo denominado categoria, conforme a Tabela 1. Valor 0 3 2 1 Tabela 1 – Valores para o atributo Categoria Nome Descrição Neutro Não há problemas. Aviso Um novo problema pode ocorrer. Problema Um novo problema está ocorrendo. Problema Grave Um novo problema grave está ocorrendo. Todas as representações que o usuário definir possuem alguns elementos em comum. Ao contrário das consultas, tais elementos não possuem influência no processo de recuperação dos casos: 6 • Código: uma vez que muitas representações podem ser criadas, é necessário haver um número identificador único para cada caso, criado automaticamente pelo sistema. • Nome: nome da representação do caso, definido pelo usuário. • Descrição: objetivo pelo qual a representação foi criada, definido pelo usuário. • Freqüência: intervalo de coleta do caso, em minutos, definido pelo usuário. • Solução: descrição da resolução ou da tentativa de resolução e do sucesso ou não da mesma, preenchidas pelo usuário. • Limiar: atributo utilizado no algoritmo do processo de recuperação, definido pelo usuário. Dessa forma, cada representação de caso possui os seis atributos citados acima, o atributo categoria, descrito na Tabela 1, e uma ou mais consultas SQL, totalizando oito atributos mínimos. Para cada atributo há um tipo e tamanho específico de dado conforme a Tabela 2. Tabela 2 – Atributos mínimos do Caso Atributo Tipo Tamanho Codigo Numérico 10 Nome Texto 100 Descricao Texto 400 Frequencia Numérico 10 Solucao Texto 1024 Categoria Numérico 1 Limiar Numérico 6 SQL Texto 1024 A representação de casos em SRBC envolve, neste sistema, a atribuição de pesos, níveis de relevância, aos atributos de um caso de acordo com a sua importância na caracterização do problema (AAMODT e PLAZA, 1994). Assim, apenas as consultas SQL são relevantes para a caracterização de um problema em um sistema gerenciador de banco de dados relacional e, portanto, são os únicos elementos aos quais pesos devem ser atribuídos. Todos os outros elementos devem possuir peso nulo ou igual a zero, conforme apresentado no Quadro 1. Quadro 1 – Peso dos Atributos do Caso Atributo Peso (x) Código x = 0 ou x = nulo Nome x = 0 ou x = nulo Descricao x = 0 ou x = nulo Frequencia x = 0 ou x = nulo Solucao x = 0 ou x = nulo Categoria x = 0 ou x = nulo Limiar x = 0 ou x = nulo SQL 0<x<1 Com base no protótipo de representação de caso criado pelo especialista e nas definições de atributos e pesos descritos na Tabela 2 e no Quadro 1, foi concluída a representação final dos casos do sistema, atentando para o indefinido número de consultas SQL possíveis. A Figura 2 ilustra um exemplo de caso que caracteriza um problema de desempenho conhecido como locks (travas) em um banco de dados Oracle. O SGBDR da Oracle segue um sistema de integridade de dados que antecipa conflitos em potencial e bloqueia algumas transações de interferirem em outras com o objetivo de evitar conflitos entre transações concorrentes, são os chamados locks (ALAPATI, 2009). 7 Figura 2 – Exemplo de Caso Conforme a Figura 2, os seis primeiros atributos não serão utilizados na recuperação dos casos, porém todos os atributos restantes influem no processo de recuperação. O atributo limiar é utilizado para limitar a similaridade entre os casos recuperados. Os cinco últimos atributos, também na cor verde, são as consultas SQL definidas pelo usuário. Cada consulta SQL representa um comando a ser executado no SGBDR, e os resultados desses comandos constituem os valores dos atributos correspondentes. Os tipos de valores retornados, numérico ou texto, dependem dos comandos utilizados na consulta SQL. 3.3 Indexação dos Casos A indexação dos casos neste sistema foi desenvolvida para facilitar e simplificar o processo de recuperação. Cada caso armazenado na base de conhecimento é representado através de uma entidade do banco de dados. Cada linha dessa tabela contém os identificadores e os valores dos atributos do caso. Assim, através dos identificadores, é possível consultar a entidade de atributos e recuperar o peso atribuído a cada um, para que possam ser utilizados na etapa de recuperação. 3.4 Recuperação dos Casos O processo de recuperação dos casos terá como base a utilização do algoritmo do vizinho mais próximo. Seguindo esse contexto, cada atributo da representação do caso tem um peso específico, conforme seção 3.2, para que possa ser calculada a distância entre os casos, fator principal para a escolha do caso mais próximo, ou mais semelhante, ao caso que se deseja obter uma solução. Figura 3 – Algoritmo do vizinho mais próximo (COVER e HART, 1967) A utilização do algoritmo do vizinho mais próximo no ciclo do RBC tem como objetivo encontrar, dentre os casos armazenados na base, o caso mais semelhante ao novo problema, onde: • • • • • • d: é resultado do cálculo da distância entre dois elementos; q: representa o novo problema; c: representa um caso armazenado na base; f: representa a característica de q e c; w: é o peso atribuído a característica f; sim: é a função de similaridade; Existem diversas técnicas de medida de similaridade e a mais frequentemente aplicada, e também utilizada neste projeto, utiliza a distância Euclidiana entre dois elementos de um mesmo espaço temporal. O Quadro 2 ilustra a comparação entre dois casos C1 e C2, armazenados na base, com o novo problema. 8 Quadro 2 – Comparação de C1, C2 e novo problema Peso C1 C2 Problema Atributo 0.6 52 47 50 ConsultaLocks 0.1 7 3 5 ConsultaTabelas 0.1 5 8 9 ConsultaUsuarios 0.2 20 25 22 ConsultaSessoes Através dos pesos definidos para cada atributo, e dos valores de atributos correspondentes para cada caso, é então calculada, separadamente, a distância de cada um em relação ao novo problema, conforme a Figura 4. Figura 4 – Cálculo de distancia entre casos Verifica-se que o valor da distância entre os casos da base e o novo problema é maior para o caso C1 e menor para o caso C2. Assim, considera-se o caso C2 como de maior semelhança ao novo problema. Entretanto, o caso C2 só será utilizado como caso recuperado no ciclo do RBC se a distancia calculada estiver abaixo do limiar estabelecido pelo usuário durante a criação da representação do caso. 3.5 Reutilização, Revisão e Retenção dos Casos O processo de reutilização de casos neste sistema consiste na atribuição da categoria e da solução do caso recuperado ao novo caso. Os valores de categoria, conforme a Tabela 1 (apresentada na seção 3.2) estão relacionados à caracterização de problemas. Se o caso recuperado representar um cenário real de problema e possuir o valor 3 (três) para a categoria, por exemplo, o novo caso será atribuído com o mesmo valor. O mesmo acontece para a solução, sendo também replicada ao novo caso. Uma vez reproduzidos os valores de categoria e de solução ao novo problema, cabe ao usuário revisar se eles realmente se aplicam ao novo caso. Se alterações forem necessárias, ambos os valores podem ser modificados através da interface do sistema. Caso não haja modificações, o usuário pode solicitar o armazenamento do caso na base de conhecimento. Novos casos que receberem o valor de categoria 0 (zero), após o processo de reutilização, serão automaticamente armazenados na base sem qualquer intervenção do usuário. 9 4 IMPLEMENTAÇÃO DO SISTEMA Os itens descritos nesta seção têm como objetivo o esclarecimento das etapas de implementação deste sistema baseado em casos para o monitoramento e identificação de problemas em sistemas gerenciadores de banco de dados relacional. 4.1 Tecnologias A codificação do sistema foi realizada através da linguagem de programação C# com o auxílio do framework .NET e do software Visual Studio, da Microsoft. O Visual Studio é um ambiente de desenvolvimento integrado (IDE) especialmente dedicado ao framework .NET e as linguagens Visual Basic, C, C++ e C#, também sendo amplamente utilizado para o desenvolvimento web, através da plataforma ASP.NET (Microsoft, 2008). Além de auxiliar na implementação do código-fonte, o Microsoft Visual Studio foi escolhido como ferramenta de desenvolvimento por facilitar a criação de interfaces gráficas e por permitir a criação de sistemas locais (desktop), aplicações para a web ou ainda para aparelhos móveis. Para este projeto optou-se pela utilização de um sistema desktop, uma vez que o principal usuário do sistema, o administrador de banco de dados, realiza a maioria de suas tarefas através de softwares na sua própria estação de trabalho. Como base de dados, é utilizado o SQL Server 2008, o sistema gerenciador de banco de dados relacional da Microsoft. O SQL Server é amplamente integrado com o Visual Studio e, por esse motivo, torna prática a modelagem e o acesso aos dados. A versão escolhida é a EXPRESS, que não exige compra de licenças e permite que qualquer indivíduo utilize o SQL Server livremente. 4.2 Funcionalidades As funcionalidades do sistema foram planejadas de forma a atender as necessidades do administrador de banco de dados na identificação de problemas. Para facilitar a utilização, o sistema foi logicamente dividido em três segmentos: • • • • • 4.2.1 Administração de alvos Administração de atributos Administração de casos Coleta e monitoramento Módulo especialista Administração de alvos A administração de alvos refere-se à criação e manutenção das fontes de conexão dos bancos de dados a serem monitorados pelo sistema. Cada alvo armazena as informações de endereçamento de um SGBDR. Os alvos podem estar localizados em qualquer servidor, desde que estejam acessíveis a partir da máquina onde o sistema está sendo utilizado pelo usuário. Inicialmente, este sistema só permite que sejam criados alvos para o SGBDR Oracle e Microsoft SQLServer. Para que seja possível conectar a um SGDBR utilizam-se algumas informações básicas, independentemente do tipo ou marca de banco de dados a ser acessado. O usuário do sistema é responsável por fornecer a string de conexão ao SGDBR. Uma vez que se possui essa informação, a conexão pode então ser criada. A Figura 5 ilustra o comportamento do sistema em relação aos alvos. Figura 5 – Arquitetura de alvos 10 Cada representação de caso criada pode ter apenas um alvo relacionado, porém um alvo pode ser utilizado por diversos casos. Assim, cada caso irá realizar a coleta de dados de apenas um SGDBR. Em outras palavras, as consultas SQL do caso serão executadas a partir da conexão com o banco de dados alvo, e o usuário do sistema é responsável por fornecer os dados de conexão corretos. 4.2.2 Administração de atributos O segmento de administração de atributos permite ao usuário criar, editar e remover consultas SQL. Conforme apresentado na seção 3.2 deste trabalho, as consultas SQL são os únicos atributos relevantes ao caso. Outro importante detalhe é o fato de que o código SQL de uma consulta pode ser utilizado em diversas representações de casos. Cada consulta SQL criada pelo usuário irá gerar um novo atributo no sistema, que pode ser utilizado por mais de uma representação de caso. Sendo assim, para que o usuário possa criar uma nova representação, é necessário que antes estejam criadas todas as consultas SQL que irão compor os atributos daquele novo caso. A edição de código de consultas SQL existentes pode ser realizada a qualquer momento, porém caso essa consulta também esteja em utilização por outros casos a modificação será replicada entre eles, uma vez que o atributo é o mesmo no sistema. Por outro lado, a exclusão de uma consulta não será permitida se aquele atributo fizer parte de qualquer representação de caso ainda presente no sistema. Os códigos utilizados nas consultas devem ser compatíveis com as especificações de linguagem do SGBDR a ser monitorado. Em outras palavras, caso o usuário esteja criando uma representação de caso para monitorar um SQLServer, por exemplo, o código utilizado deve seguir a semântica da linguagem SQL da Microsoft. Dessa forma, o usuário do sistema é responsável por garantir a sintaxe e a semântica correta daquela linguagem. 4.2.3 Administração de casos Uma vez que as consultas SQL estejam criadas, conforme o item 4.2.2, o usuário poderá então iniciar a definição da representação dos casos. Toda consulta adicionada a representação do caso, porém, deve ter um peso atribuído, variando de zero a um. Através da interface de administração de casos é possível criar novos casos ou remover casos existentes. Operações de edição em uma representação já criada, como adição ou remoção de atributos, não são possíveis, uma vez que o raciocínio baseado em casos não permite que a representação do caso seja modificada durante o ciclo. Entretanto, o usuário pode modificar o valor ou o conteúdo de atributos existentes, como nome, frequência e limiar. Conforme descrito anteriormente na seção 3.2 deste trabalho, muitas representações de casos podem ser criadas. Cada representação fará parte de um único ciclo de RBC, assim o sistema terá que administrar o funcionamento dos diversos ciclos. Em resumo, se o usuário criar duas diferentes representações de casos para monitorar os bancos A e B, por exemplo, as quatro fases do ciclo do RBC serão executadas separadamente para cada representação. Para que o monitoramento de cada representação de caso ocorra, o usuário deve definir a frequência de execução do processo de recuperação do caso. O usuário estabelece o intervalo de tempo para que o caso seja coletado no alvo. Se uma frequência de quinze minutos for definida, por exemplo, isso significa que o sistema irá criar uma conexão ao SGBDR alvo relacionado e irá executar as consultas SQL que compõem o determinado caso toda vez que o intervalo de quinze minutos for atingido, conforme ilustrado na Figura 6. Os retornos das consultas irão compor os valores dos atributos do caso. !" Figura 6 – Exemplo de coleta do caso 11 Além do atributo frequência, o usuário deve fornecer outras informações para a criação de uma nova representação de caso. Cada representação terá um identificador único, criado automaticamente pelo sistema, porém o usuário deve definir o nome, bem como a descrição da representação. A seguir, o usuário deve informar a qual grupo aquela representação pertence, qual o limiar para aquela representação e qual o alvo relacionado. Os grupos são utilizados para facilitar a organização, uma vez que os casos podem ser agrupados em tipos de problemas específicos, ou de acordo com as áreas do SGBDR a serem monitoradas. 4.2.4 Coleta e Monitoramento O monitoramento refere-se à interface pela qual o DBA terá acesso as tarefas de coleta de casos do sistema. As tarefas de coleta são as atividades as quais executam os comandos SQL que compõe os casos de acordo com o atributo freqüência definido pelo usuário quando da criação da representação do caso. Através do monitoramento, o usuário poderá verificar as informações dos casos coletados. Para cada representação de caso do sistema, serão executados os quatro processos do ciclo do RBC: recuperação, reutilização, revisão e retenção. A tela de monitoramento permite que o usuário verifique se existem casos que foram identificados em alguma categoria, após o processo de recuperação ser realizado (seção 3.4). A interface fornece, ao mesmo tempo, informações sobre o caso semelhante recuperado e ainda possibilita o acesso direto ao atributo solução do caso recuperado. A principal função do sistema é a identificação de problemas ou possíveis problemas de desempenho no SGDBR, assim, apenas casos que se enquadrem nessa questão serão exibidos na interface. As atividades de administração da tela de monitoramento incluem a ordenação dos casos por categoria ou grupo, o armazenamento de casos e, principalmente a atribuição de uma solução, descrita em formato texto, e a modificação da categoria do caso, se o usuário achar necessário alterar a categoria que foi atribuída automaticamente pelo sistema. A Figura 7 ilustra o diagrama de atividades da linguagem UML (GOGOLLA e KOBRYN, 2001) do processo de monitoramento. Um caso C1 recém coletado é submetido ao processo de recuperação. Ocorre a recuperação de um caso semelhante S1 e o valor do atributo categoria é replicado ao novo caso C1, que por sua vez, passa a ser exibido na tela de monitoramento, se o valor de categoria for diferente de zero. Figura 7 – Diagrama de atividades: monitoramento 4.2.5 Módulo Especialista O módulo especialista deste sistema consiste em algumas funcionalidades específicas que devem ser utilizadas apenas pelo especialista, sendo controladas através de um processo de autenticação, com o objetivo de filtrar o acesso. Embora ambos o usuário e o especialista deste sistema sejam DBAs, os sistemas baseados em casos normalmente permitem que apenas o especialista realize modificações na base de conhecimento, bem como na representação dos casos. O principal objetivo de controlar o acesso é evitar que casos armazenados sejam alterados indevidamente, mantendo a base de conhecimento íntegra. Sendo assim, este módulo utiliza uma interface que solicita usuário e senha para login. 12 4.3 Interfaces As interfaces gráficas do sistema foram desenvolvidas com o intuito de seguir um mesmo padrão, conforme os princípios da usabilidade. Com o auxilio do Microsoft Visual Studio, as telas foram criadas como forms (formulários) do Windows. A maioria dos princípios de design e usabilidade está internamente incluído em interfaces desse tipo (SATZINGER, JACKSON e BURD, 2009). 4.3.1 Menu A interface de menu contém quatro dos segmentos lógicos do sistema: administração de alvos, administração de atributos, administração de casos e monitoramento. Cada opção do menu exibe sub-itens com as funcionalidades relacionadas, como inclusão, edição e exclusão de elementos. O menu está presente apenas na tela inicial do sistema e é do tipo cascata, sendo os sub-itens carregados em pequenas áreas abaixo do item de menu respectivo, quando esse for selecionado (Figura 8). Ao selecionar um subitem do menu, uma nova janela (formulário) será carregada separadamente. Figura 8 – Menu do sistema 4.3.2 Interface de Monitoramento Esta é a interface principal do sistema, apresentada na Figura 9, e é através dela que o DBA irá monitorar os SGBDR. Graficamente, ela está dividida em duas áreas, sendo uma delas o painel de casos e a outra de contadores. No painel de casos será exibida a lista de casos que foram identificados como aviso, problema ou problema grave, com os valores de categoria três, dois e um respectivamente. Casos com valor de categoria zero não serão exibidos, visto que não caracterizam qualquer instabilidade. Uma vez que esteja ciente dos casos presentes no painel, cabe ao usuário definir as modificações necessárias antes que o caso possa ser retido na base. Assim, os valores de atributos podem sofrer alterações conforme as respectivas instruções: • Categoria: o primeiro valor de categoria é atribuído automaticamente pelo sistema após a recuperação de um caso semelhante. A categoria pode ser modificada pelo usuário de acordo com a Tabela 1 (seção 3.2). Se o caso estiver armazenado, a categoria poderá apenas ser modificada através das interfaces de administração de casos da base de conhecimento. • Solução: a solução para o problema caracterizado pode ser inserida e modificada a qualquer momento pelo usuário. Assim que o usuário definir que as alterações necessárias foram concluídas, ele pode, então, armazenar o caso na base através do botão Armazenar. Consequentemente, os casos armazenados não serão mais exibidos no painel, porém estarão imediatamente disponíveis na base de casos para que participem dos próximos processos de recuperação. O DBA também possui a funcionalidade de visualizar os detalhes do caso semelhante recuperado para cada caso exibido no painel. Dessa forma, ele pode ter acesso a solução anterior do caso recuperado, e verificar se ela pode ser útil na resolução do novo problema. Sobre a área de contadores, essa sessão tem por objetivo exibir dados sobre a contagem de casos da base. Através do painel de estatísticas, o usuário poderá verificar o número total de casos retidos na base, bem como a contagem de casos por categoria. Em ambos os painéis da interface de monitoramento, os casos são diferenciados através de cores por categoria. Os casos de categoria três, que simbolizam um aviso ao usuário, serão exibidos na cor amarela. Os casos de categorias dois e um, que caracterizam a ocorrência de problemas e de problemas graves, são representados nas cores laranja e vermelha, respectivamente. Ainda na interface de monitoramento, o usuário pode interromper ou iniciar o processo de coleta dos casos, através de dois botões localizados na subárea Processo de Coleta de Casos. Se o botão que interrompe o processo for pressionado, todas as representações de caso são afetadas, uma vez que novos casos não serão coletados. 13 Figura 9 – Tela de monitoramento 4.3.3 Base de Conhecimento O acesso aos casos armazenados na base de conhecimento é realizado através do item de menu Casos, e do subitem Base de Conhecimento. Através das interfaces de manipulação de casos da base, o usuário pode realizar operações como cadastro, edição e exclusão. Tais funcionalidades são controladas, entretanto, pelo módulo especialista, que exige credencias para o acesso. Na tela de Cadastro de Caso na Base de Conhecimento (Figura 10), o especialista pode inserir novos casos para qualquer representação de casos, desde que a representação já tenha sido cadastrada anteriormente. O usuário seleciona a representação desejada, informa valores para categoria e solução, e pode então inserir os atributos que representam o retorno de cada consulta SQL, para que possam ser utilizados nos próximos processos de recuperação de caso. Figura 10 – Cadastro de caso na base de conhecimento 14 4.4 Diagrama ER O diagrama ER da base de dados deste sistema, conforme apresentado na Figura 11, foi planejado de acordo com regras de organização de dados em tabelas de um banco de dados relacional. O processo de modelagem de dados em tabelas relacionais é conhecido como normalização e pode ser altamente complexo. Usualmente, entretanto, utilizam-se apenas três níveis de normalização, divididos em: primeira, segunda e terceira forma (WATSON e RAMKLASS, 2008). Os relacionamentos entre tabelas são compostos através de chaves primárias e chaves estrangeiras, conforme descrito no item 2.2.1 (Seção 2.2). Figura 11 – Diagrama ER 5 VALIDAÇÃO E RESULTADOS A validação deste sistema ocorreu através da sua utilização, durante um período de cinco dias, pelo especialista, que é um administrador de banco de dados Oracle de uma grande empresa. O objetivo principal da validação foi verificar a correta aplicação do algoritmo do vizinho mais próximo e a confiabilidade dos resultados apresentados pelo sistema. O especialista criou cinco representações de caso, onde cada uma representou um tipo de problema diferente a ser monitorado. Para cada representação de caso foram criadas consultas SQL específicas através da interface de Cadastro de Atributos, conforme apresentado na Figura 12. Algumas das consultas foram utilizadas em mais de um caso. Figura 12 – Cadastro de Consulta SQL 15 Os pesos atribuídos para cada consulta SQL e a freqüência de coleta para cada representação foram definidos pelo especialista de acordo com o que foi julgado mais importante para a caracterização de cada problema. O limiar para todas as representações de caso foi inicialmente definido em 5.0, e posteriormente alterado a fim de identificar o valor mais adequado para cada representação. A Figura 13 ilustra a criação de uma das representações. Figura 13 - Cadastro da Representação de Caso Uma vez que as cinco representações de caso foram definidas, o especialista criou a base de conhecimento. Através da tela de Cadastro de Caso na Base de Conhecimento, foram incluídos cinco novos casos para cada representação, de categorias zero, um, ou dois. O especialista decidiu por não incluir nenhum caso de categoria três (problema grave), pois achou mais interessante que o sistema realiza-se as coletas e que a categoria de problemas considerados graves fosse modificada através do painel, quando conveniente. Assim, a base de conhecimento do sistema foi inicialmente populada com 25 casos. Durante o primeiro dia, o DBA verificou que o limiar definido em 5.0 estava alto demais para a maioria dos casos, uma vez que de um total de 137 casos coletados, 84 apresentaram uma distância abaixo do limiar, sendo que apenas 13 foram confirmados como identificações corretas, representando uma confiabilidade do sistema de aproximadamente 15%. Sendo assim, ao longo dos cinco dias, o limiar das representações foi sendo modificado para possibilitar uma melhor identificação e diferenciação dos casos. A modificação do limiar de uma das cinco representações resultou, por exemplo, em uma confiabilidade de 87% ao final do período, conforme apresentado no Quadro 3. Dia 1 Dia 2 Dia 3 Dia 4 Dia 5 Limiar 5,0 3,0 2,5 2,0 1,0 Total de coletas da representação 23 31 28 35 27 Coletas abaixo do limiar 17 18 13 10 8 Coletas corretamente identificadas 5 8 9 7 7 29% 44% 69% 70% 87% Confiabilidade Quadro 3 – Dados sobre as coletas de uma representação Uma vez que o funcionamento do sistema é baseado em casos, os quatro passos do ciclo do RBC devem ser seguidos. No momento em que um caso é exibido ao usuário através do painel de casos, as etapas de recuperação e reutilização de caso já devem ter sido realizadas, portanto é esperado que a categoria do novo caso possua o mesmo valor da categoria do caso semelhante recuperado. O mesmo deve acontecer para o atributo solução. Sendo assim, o especialista realizou verificações constantes nas informações dos 16 casos apresentados no painel, e realizou algumas capturas de telas (Figura 14), para conferir se a categoria e a solução foram atribuídas conforme esperado, se os valores retornados em cada coleta realmente estavam próximos e se a distância calculada entre o novo caso e o caso semelhante estava abaixo do limiar. Figura 14 – Caso recuperado e caso semelhante Dessa forma, foi possível validar que as funcionalidades do sistema apresentaram comportamentos dentro do esperado. Também foi verificado que o usuário não encontrou dificuldades de uso durante o período de validação, o que confirma um bom grau de usabilidade das telas e interfaces de operações. Por fim, o especialista sugeriu algumas modificações ao sistema, como evitar que casos iguais, coletados durante um pequeno intervalo de tempo, sejam exibidos no painel. Esse cenário ocorreu durante períodos em que um problema identificado no SGDBR demorou a ser solucionado, fazendo com que as coletas realizadas durante esse intervalo possuíssem exatamente os mesmo valores de atributos. As melhorias sugeridas serão consideradas para trabalhos futuros. 6 CONCLUSÃO O raciocínio baseado em casos (RBC) foi, durante anos, uma das áreas com o crescimento mais acelerado no campo de sistemas baseados em conhecimento. Através da recuperação e aplicação de experiências passadas a novas situações de problemas, o RBC possui a capacidade de resolver questões complexas. Considerado hoje um grande expoente dentre as metodologias de resolução de problemas, o RBC utiliza a similaridade entre casos de um mesmo ambiente, sendo amplamente aplicado em sistemas de informação nas mais diversas áreas e tecnologias. Ao longo deste artigo foram descritas as etapas de implementação do RBC para a criação de um sistema de monitoramento e identificação de problemas em sistemas gerenciadores de banco de dados relacional (SGBDR). Os quatro processos do ciclo do RBC foram analisados e aplicados conforme as necessidades apresentadas pelo especialista na área de administração de SGBDR, contribuindo para que o objetivo inicial de auxiliar o administrador de banco de dados (DBA) em suas tarefas diárias pudesse ser alcançado. 17 O resultado mais significativo obtido durante a validação deste sistema ocorreu quando o especialista, e também DBA Oracle, classificou o aplicativo como uma ferramenta que incentiva a próatividade e, consequentemente, possibilita a diminuição no tempo de resolução de problemas. Segundo ele, o diferencial apresentado em relação a sistemas já existentes no mercado está no armazenamento e na utilização de experiências passadas, uma vez que uma base de conhecimento é criada e aperfeiçoada ao longo do tempo. O especialista também destacou a importância no fato de o sistema realizar o monitoramento automático e pontual do SGBDR com a utilização de consultas SQL definidas pelo próprio usuário. Assim, com a análise e o desenvolvimento do sistema apresentado neste artigo, bem como com os resultados obtidos através do período de validação, acredita-se que as expectativas iniciais tenham sido atendidas. Entende-se, entretanto, que melhorias possam ser realizadas para que esta ferramenta um dia possa ser reconhecida e amplamente utilizada na área de SGBDR. REFERÊNCIAS AAMOD, A; PLAZA, E; Case-Based Reasoning: Foundational issues, Methodological Variations and System Approaches. AI Communications, vol. 7, 1994 ALAPATI, Sam R. Expert Oracle Database 11g Administration. The Expert’s Voice in Oracle, 2009. BRYLA, Bob. Oracle Database Foundations: Technology Fundamentals for IT Success. London, 2004. CHEN, Peter Pin-Shan. The Entity-Relationship Model – Toward a Unified View of Data. Massachusetts Institute of Technology, 1970. CODD, Edgar Frank. A Relational Model of Data for Large Shared Data Banks. 1970 COPPIN, Ben. Artificial Intelligence Iluminated. Jones and Barlett Illuminated Series, Canada, 2004. COVER, T; HART, P; Nearest Neighbor Pattern Classification. 1967 DHENE, Frank. Algorithms and Data Structures. Third Workshop, Montreal, Canada, 1993. FORTA, Ben. SQL: Sams Teach Yourself. Third Edition Includes Coverage of MySQL and PostgreSQL; 2004 GOGOLLA, Martin; KOBRYN, Cris; UML 2001 – The Unified Modeling Language: Modeling Languages, Concepts and Tools. 4th International Conference, Toronto, Canada, 2001. KOFLER, Michael. The Definitive Guide to MySQL. New York, NY, 2005. KOLODNER, Janet. Improving human decision making through case-based decision aiding. Artificial Intelligence Magazine, 1991. KOLODNER, Janet. Case-Based Reasoning. 1993. MORTON, Karen; OSBORNE, Kerry; Pro Oracle SQL: Exploit the full power of SQL and supporting features in Oracle Database. 2010 NILSSON, Nils J; Artificial Intelligence: a new synthesis. United States, 1998. SATZINGER, John; JACKSON, Robert; BURD, Stephen; Systems Analysis & Design In a Changing World. USA, 2009. SCHMALHOFER, Franz; STRUBE, Gerhard; WETTER, Tomas. Contemporary knowledge engineering and cognition. First Joint Workshop, 1991. WATSON, John; RAMKLSS, Roopesh; OCA Oracle Database 11g: SQL Fundamentals I. USA, 2008. 18