Este artigo est� escrito em Ingl�s e Portugu�s
English version:
Some time ago, during a customer engagement, I felt the need to be able to show them if there were lock waiting sessions in their most busy system. Of course any old time Informix DBA will tell that onstat -k/K is able to provide this. But in their environment they needed this to be available to a broader audience than just the DBA team (who are the ones with database server command line access). So we decided to create a simple PHP script with Informix connection that showed it in a web page available in their Intranet. They're currently moving into using Open Admin Tool (OAT) and I though it would be nice to move that into OAT. Note that OAT already includes some reports that provide similar (although with less detail) information (session waiting report).
So I thought it would be nice to do it properly and create a plug-in. I searched around, specifically in OAT's home ( http://www.openadmintool.org ) and found a link to an article about creating plugins in OAT: http://www.ibm.com/developerworks/db2/library/techarticle/dm-0808vonbargen/
The author of this article is Erika Von Bargen, an IBM colleague, which is very active in the OAT specific IIUG mailing list. People who went to this year's IIUG conference possibly also know her since she was there presenting sessions about OAT.
Now... To tell you the complete truth, sometimes I'm very lazy (aren't we all at times?) when it comes to properly read documentation. So I just jumped into a terminal and started looking at an example plug-in provided with OAT. In a few minutes I had changed the query and I was seeing the information we were used to see in the customized web page. Obviously every message and column header was missing, the menus were wrong etc. But It was enough to become enthusiastic about this subject. I posted a few messages in OAT's mailing list, and had a quick feedback from Erika, which was a great help.
After the initial startup I decided to do it properly, and I read the article above, and it's a nice, clear and concise article. It's perfect to get you started.
So, after the initial "code, test, fix error, test....", instead of the "read, plan, code, test, fix..." I was ready to do it properly and I took some time at home to play with this. And I kept adding some features, some usability details and finally got to a point where I think I have a working plug-in. It has four options:
- List all the instance locks
This shows information similar to onstat -K, but most of the information is immediately readable (meaning you don't have to query sysmaster to get the table names, and you don't have to run onstat -u | grep .... to get the session number. - List locks with waiters
This shows information on every lock that has a lock list. The information includes:
- The owner username, session number, process id and client machine
- The waiter username, session number, process id and client machine
- The table/index in question, the time the lock was established and how long the wait is waiting - List locks per table
This shows information about locking for every active table in your system. The information includes the number of currently held locks, the number of lock requests made on the table, the number of lock waits, the number of deadlocks and the number of lock timeouts - List locks per session
This shows the number of currently held locks, the number of lock requests made by the session, the number of lock waits, the number of deadlocks and the number of lock timeouts
Also, I'd love to receive feedback about bugs or improvements. I have a few ones on my mind, but it's always better to listen to others...
So, where is it? I've just upload it to IIUG software repository. It's the first time I do it, so I'm not sure how long will it take to become available
[UPDATE 31 Aug 2010]: It's already available on the IIUG repository .
If you want to check the aspect of it, before giving it a try, please see below some snapshots.
How stable is it? It wasn't tested on big systems. But all it does is query the sysmaster. So, the worst thing that could happen would be giving you some wrong information. It should not do any harm to your system. In any case treat this as a beta release for now. One thing that can happen is that the pages show all the information fetched by the queries. In large systems, with thousands of locks, sessions, or tables, this can translate into very big HTML pages... Be aware of this.
To the best of my knowledge the queries return proper results. The locks with waiters page is based on a query being used for a fairly long time. The other queries were created and tested in a very controlled environment, so admittedly it's possible that they don't cover some situations.
Every feedback is welcome. Although OAT already includes some functionality in this area, I think this will give you a more direct and condensed tool to monitor your database locking activity. As such I believe the plug-in can be useful and it certainly can be improved.
Vers�o portuguesa:
H� algum tempo atr�s, durante um trabalho num cliente, senti a necessidade de lhes mostrar se tinham sess�es � espera de locks no sistema mais utilizado. Claro que qualquer DBA Informix com alguma experi�ncia dir� que o onstat -k/K � capaz de responder a esta necessidade. Mas no caso que refiro, era necess�rio que esta informa��o estivesse dispon�vel para uma audi�ncia mais alargada que apenas a equipa de DBAs (os �nicos com acesso � linha de comando no servidor de base de dados).
Por isso, decidimos criar um script PHP, simples, com conex�o ao Informix, que mostrasse a informa��o numa p�gina Web dispon�vel na Intranet da empresa. Actualmente est�o a come�ar a usar o Open Admin Tool (OAT) e pareceu-me adequado colocar esta funcionalidade dentro da mesma ferramenta. Note-se que o OAT j� fornece informa�ao semelhante (embora com menos detalhe) no relat�rio de sess�es em espera.
Assim pensei que seria bom fazer isto como deve ser e criar um plug-in. Procurei informa��o, especificamente no website do OAT ( http://www.openadmintool.org ) e encontrei uma liga��o a um artigo sobre cria��o de plug-ins para o OAT: http://www.ibm.com/developerworks/db2/library/techarticle/dm-0808vonbargen/
A autora deste artigo � a Erika Von Bargen, uma colega da IBM, bastante activa na mailing list do OAT do IIUG. Quem teve oportunidade de estar na confer�ncia do IIUG este ano tamb�m teve oportunidade de assistir a sess�es apresentadas por ela, precisamente relacionadas com o OAT
Bom... Para ser franco, ocasionalmente sou bastante pregui�oso (n�o seremos todos de vez em quando?) quando toca a ler documenta��o. Por isso, abri uma sess�o e comecei a estudar um exemplo de plug-in fornecido com o OAT. Em apenas alguns minutos, tinha mudado a query que lhe serve de base e estava a ver a informa��o a que est�vamos habituados na p�gina personalizada. Naturalmente, todas as mensagens e cabe�alhos de tabelas estavam errados ou em falta, os menus estavam errados etc. Mas foi o suficiente para me tornar um entusiasta do assunto. Coloquei algumas mensagens na mailing list do OAT e obtive respostas r�pidas da Erika que foram uma grande ajuda.
Ap�s o arranque inicial, decidi que devia fazer as coisas devidamente, e li o artigo mencionado acima, que � bom, claro e conciso. Ideal para quem quer come�ar com a tarefa de criar um plug-in.
Assim, ap�s a abordagem inicial de "codificar, testar, corrigir erros, testar....", passei para a de "ler, planear, codificar, testar, corrigir....". Estava preparado para fazer isto como deve ser e disponibilizei algum tempo em casa para "brincar" com isto. E fui adicionando funcionalidades, detalhes para melhorar a usabilidade, e finalmente cheguei a um ponto onde julgo ter um plug-in que funciona.
Tem quatro op��es:
- Listar os bloqueios na inst�ncia
Isto mostra informa��o semelhante ao onstat -K, mas a maioria da informa��o � de leitura imediata (ou seja, n�o � necess�rio pesquisar na sysmaster para obter os nomes das tabelas, e n�o temos de correr um onstat -u | grep ... para obter o n�mero da sess�o - Listar os bloqueios com fila de espera
Isto mostra informa��o de cada bloqueio que tenha uma lista de espera. Esta informa��o inclu�:
- O dono do bloqueio, incluindo nome de utilizador, n�mero de sess�o, n�mero de processo e a m�quina cliente
- Quem est� � espera, inclu�ndo o nome de utilizador, n�mero de sess�o, n�mero de processo e a m�quina cliente
- A tabela/ind�ce que tem o bloqueio, o instante em que o bloqueio foi estabelecido e h� quanto tempo existe a espera - Listar os bloqueios por tabela
Isto mostra informa��o sobre os bloqueios para todas as tabelas activas do seu sistema.
A informa��o inclu� o n�mero de bloqueios activos no momento, o n�mero de pedidos de bloqueios feitos sobre a tabela, o n�mero de esperas por bloqueios sobre a tabela, o n�mero de deadlocks que envolveram a tabela, e o n�mero de vezes que os tempos de espera por bloqueios expiraram - Listar os bloqueios por sess�o
Isto mostra o n�mero de bloqueios que cada sess�o mant�m activos, o n�mero de pedidos de bloqueio feitos pelas sess�es, o n�mero de esperas por bloqueios, o n�mero de deadlocks da sess�o, e o n�mero de tempos de espera por bloqueios expirados
Adicionalmente, terei todo o gosto em receber coment�rios sobre bugs ou melhorias. Tenho algumas em mente, mas � sempre melhor escutar opini�es de outros...
Ent�o, onde est� o plug-in? Acabei de fazer o envio para o reposit�rio de software do IIUG. � a primeira vez que o fa�o, e sinceramente n�o sei quanto tempo levar� a ficar dispon�vel.
[ACTUALIZA��O 31 Aug 2010]: J� est� dispon�vel no reposit�rio de software do IIUG.
Se desejar ver o aspecto do plug-in, antes de o testar, por favor veja as imagens abaixo.
Qu�o est�vel � o plug-in? N�o foi testado em sistemas grandes. Mas tudo o que faz � pesquisar a sysmaster. Por isso, al�m de alguma poss�vel informa��o errada n�o dever� causar qualquer problema nos seus sistemas. Em todo o caso trate isto como uma release beta por enquanto. Algo que pode acontecer � que as p�ginas mostram toda a informa��o obtida nas queries. Em sistemas grandes, com milhares de bloqueios, sess�es ou tabelas, isto pode traduzir-se em p�ginas HTML muito grandes.... Tenha algum cuidado com isso.
Tanto quanto me apercebi, as pesquisas retornam resultados correctos. A lista de bloqueios com lista de espera baseia-se numa query que utilizo h� bastante tempo. As outras pesquisas foram criadas e testadas num ambiente muito controlado, logo � poss�vel que possam n�o prever algumas situa��es.
Todo o feedback ser� muito bem vindo. Apesar de o OAT j� incluir alguma funcionalidade nesta �rea, julgo que este plug-in ser� uma ferramenta mais directa e condensada para monitorizar toda a actividade relacionada com bloqueios nas suas inst�ncias Informix. Como tal, acredito que o plug-in possa ser �til e certamente poder� ser melhorado.
Snapshots/�crans:
Lock List
Lista de bloqueios
Lock waiters
Lista de bloqueios com fila de espera
Locks per table
Bloqueios por tabela
Locks per session
Bloqueios por sess�o