Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Proyecto, Monitoreo y Optimizacion de nuestra BD en Firebird (https://www.clubdelphi.com/foros/showthread.php?t=58070)

felipe88 07-07-2008 17:33:58

Proyecto, Monitoreo y Optimizacion de nuestra BD en Firebird
 
Saludos amigos del Club ;)

Viendo una presentacion de Andreano Lanusse del CodeGear developer days I sobre como monitorear las bases de datos en Interbase, se me ocurrio la idea de porque no hacer lo mismo en Firebird, pero de forma que esta pueda ser aplicada a nuestras bases de datos sin problema mediante una simple aplicacion, en la que solo nos conectamos a la BD y tendremos las opciones ya preparadas para el mantenimiento.

La idea que tengo es proponerles a ustedes realizarlo entre todos, un trabajo de grupo, de este modo con sus aportes se lograra un resultado mejor (Dos cabezas piensan mejor que una ;) ) bueno tampoco deben sentirse obligados :rolleyes:... es solo una idea.

Admito que no soy un experto ni mucho menos, pero si me considero un poco hiperactivo cuando estoy aprendiendo algo nuevo; un poco cacharrero en otros terminos :p; en base a esto estuve revisando lo que llamaria Tablas temporales en Firebird con lo que se podria empezar a trabajar la parte del monitoreo.

Código SQL [-]
RDB$PAGES
RDB$DATABASE
RDB$FIELDS
RDB$INDEX_SEGMENTS
RDB$INDICES
RDB$RELATION_FIELDS
RDB$RELATIONS
RDB$VIEW_RELATIONS
RDB$FORMATS
RDB$SECURITY_CLASSES
RDB$FILES
RDB$TYPES
RDB$TRIGGERS
RDB$DEPENDENCIES
RDB$FUNCTIONS
RDB$FUNCTIONS_ARGUMENTS
RDB$FILTERS
RDB$TRIGGER_MESSAGES
RDB$USER_PRIVILEGES
RDB$TRANSACTIONS
RDB$GENERATORS
RDB$FIELD_DIMENSIONS
RDB$RELATION_CONSTRAINTS
RDB$REF_CONSTRAINTS
RDB$CHECK_CONSTRAINTS
RDB$LOG_FILES
RDB$PROCEDURES
RDB$PROCEDURE_PARAMETERS
RDB$CHARACTER_SETS
RDB$COLLATIONS
RDB$EXCEPTIONS
RDB$ROLES

Espero contar con buena aceptacion y aportes por parte de ustedes y asi finalmente lograr un buen resultado gracias al trabajo en equipo de esta gran comunidad :)

Saludos

RolphyReyes 07-07-2008 18:00:03

Saludos.

Todo va a depender de que quieres monitoriar, porque lo que muestras son las tablas del sistema y no temporales como indicas (sin animo de ofender).

En Interbase 7 o Interbase 2007 y Firebird 2.1 vienen con tablas del sistema con el proposito de monitoriar las transacciones que se realizan en la BD.

Hasta luego.

felipe88 07-07-2008 20:05:53

Cita:

Empezado por RolphyReyes (Mensaje 298703)
Saludos.

Todo va a depender de que quieres monitoriar, porque lo que muestras son las tablas del sistema y no temporales como indicas (sin animo de ofender).

En Interbase 7 o Interbase 2007 y Firebird 2.1 vienen con tablas del sistema con el proposito de monitoriar las transacciones que se realizan en la BD.

Hasta luego.

Bueno admito que me equivoque con lo de "temporales" :rolleyes: eso me lo invete yo :p... y es eso exactamente monitorear nuestra BD teniendo ya la programacion montada y toda la cosa; ademas de porque no, crear copias de seguridad y eliminar datos innecesarios o nulos

felipe88 07-07-2008 20:09:02

Añado:

La idea es de que una vez terminado como tal, este pueda estar disponible para el uso de todos los que lo necesiten.

jhonny 07-07-2008 20:46:51

A partir de Firebird 2.1 se han agregado las tablas temporales que tienen dicho fin, estas tienen como prefijo MON$, incluso para Firebird 2.5 han agregado una nueva tabla para monitorizar también la memoria, que es algo que a leguas hacia falta :D, mejor dicho... ese tema va viento en popa :D.

felipe88 07-07-2008 22:45:40

Cita:

Empezado por jhonny (Mensaje 298755)
A partir de Firebird 2.1 se han agregado las tablas temporales que tienen dicho fin, estas tienen como prefijo MON$, incluso para Firebird 2.5 han agregado una nueva tabla para monitorizar también la memoria, que es algo que a leguas hacia falta :D, mejor dicho... ese tema va viento en popa :D.

Eso si que mejora la cosa ;)... espero encontrar mas documentacion util, ya le veo futuro a esta idea; solo espero no me toque hacerlo solo :(

jhonny 07-07-2008 22:56:59

Cita:

Empezado por felipe88 (Mensaje 298784)
Eso si que mejora la cosa ;)... espero encontrar mas documentacion util, ya le veo futuro a esta idea; solo espero no me toque hacerlo solo :(

En alguna parte vi que los de FlameRobin piensan hacerlo una vez salga la versión 2.5, ya que dicha versión va a mejorar en buena manera el rendimiento.

felipe88 07-07-2008 23:16:53

Bueno Jhonny creo que te refieres a esto

Cita:

Empezado por Dmitry Yemanov
Implemented new monitoring table MON$MEMORY_USAGE to track memory pools

La verdad no pude encontrar si esta en la ultima version disponible :cool:

jhonny 07-07-2008 23:22:23

Cita:

Empezado por felipe88 (Mensaje 298794)
Bueno Jhonny creo que te refieres a esto

Bueno, esa es una tabla nueva que están implementando en la versión 2.5, para monitorizar la memoria... lo de los de FlameRobin es otro cuento, pero bueno, me gustaría comentarles que hace poco estuvimos hablando con algunos compañeros del club, acerca de un monitor igual al que mencionas y alcance a crear un par de formularios y un par de datamodulos (Pero por alguna razón que no se cual, se me bajo el entusiasmo :D, pero la idea me parece muy buena), lo único que le falta al archivo adjunto son las consultas, los reportes, definir de que manera mostraremos la información a monitorizar, en fin... le falta todo :D :D :D, de todas formas acá lo coloco a ver, si alguien así sea viendo ese coco vació, se anima y tiene tiempo para hacerlo despegar.

Archivo: http://jhonny.clubdelphi.com/archivos/FBMonitor.zip

felipe88 07-07-2008 23:45:12

Cita:

Empezado por jhonny (Mensaje 298797)
Bueno, esa es una tabla nueva que están implementando en la versión 2.5, para monitorizar la memoria... lo de los de FlameRobin es otro cuento, pero bueno, me gustaría comentarles que hace poco estuvimos hablando con algunos compañeros del club, acerca de un monitor igual al que mencionas y alcance a crear un par de formularios y un par de datamodulos (Pero por alguna razón que no se cual, se me bajo el entusiasmo :D, pero la idea me parece muy buena), lo único que le falta al archivo adjunto son las consultas, los reportes, definir de que manera mostraremos la información a monitorizar, en fin... le falta todo :D :D :D, de todas formas acá lo coloco a ver, si alguien así sea viendo ese coco vació, se anima y tiene tiempo para hacerlo despegar.

Archivo: http://jhonny.clubdelphi.com/archivos/FBMonitor.zip

Bueno ahorraste tiempo, ya creaste los form :D...

La idea es buena claro, vere que puedo adelantar aunque sea de interfaz :rolleyes:... y ver que aceptacion tiene, he de recordar que soy novato nivel -10 :p; la idea es ir acomodando todo a medida que firebird de nuevas opciones.

felipe88 08-07-2008 15:08:57

Hola,

Intente adelantar algo para la idea pero creo que quede en las mismas que tu jhonny, solo espero no perder el impulso :rolleyes::p

En este link dejo algo de lo poco que adelante, la interfaz principal la manejo mediante un TreeView donde se muestren las BD registradas y sus opciones; aun no se como sea mejor guardar las rutas de las BD si mediante un archivo .ini o por el registro

felipe88 09-07-2008 20:11:33

Hola a todos, :)

Bueno he estado tratando de sacar un poco de tiempo para poder trabajar en esta idea (Benditos informes :rolleyes:), aun tengo interrogantes sobre que seria lo esencial o necesario monitorear, por el momento pienso en las transacciones y jugar un poco con lo que nos brindan las tablas del sistema, espero puedan dar buenos aportes...

PD: Algun moderador podria añadir al titulo la palabra Proyecto, gracias :)

felipe88 09-07-2008 20:32:59

Re gracias ;)

Incialmente dentro de lo que tengo proyectado esta lo siguiente

Cita:

1. Transacciones
2. Usuarios
3. Backup
4. Limpiar datos (Aunque no se como seria en este caso :rolleyes:)
5. Reportes
Alguna sugerencia :confused:

felipe88 11-07-2008 17:47:13

:confused:... retomando un poco me quede con una inquietud, cual seria el query para saber el numero de usuarios activos??

jhonny 11-07-2008 18:18:16

Cita:

Empezado por felipe88 (Mensaje 299605)
:confused:... retomando un poco me quede con una inquietud, cual seria el query para saber el numero de usuarios activos??

El siguiente:

Código SQL [-]
 
select distinct MON$USER from MON$ATTACHMENTS

felipe88 11-07-2008 20:47:27

Hey viejo Yonny ;)... gracias.

Y aproposito, en donde puedo encontrar buena documentacion al respecto, he buscado por todas las paginas de Firebird pero hasta ahora no encuentro demasiado que digamos; poco a poco estoy formando la idea aunque llevo cero codigo :D

jhonny 11-07-2008 20:53:21

Cita:

Empezado por felipe88 (Mensaje 299662)
Hey viejo Yonny ;)... gracias.

Y aproposito, en donde puedo encontrar buena documentacion al respecto, he buscado por todas las paginas de Firebird pero hasta ahora no encuentro demasiado que digamos; poco a poco estoy formando la idea aunque llevo cero codigo :D

En la carpeta doc que distribuyen con Firebird 2.1, hay un archivo llamado "README.monitoring_tables.txt", en él encontraras lo necesario ;).

felipe88 12-07-2008 15:09:00

Hola a todos,

Bueno, dado que continuo con la idea y espero lograr algo :rolleyes: he de notar las multiples diferencias entre las tablas disponibles en Firebird; por tal motivo tengo una inquietud que espero me puedan ayudar a resolver (Codigo claro):

1. Como determino si Firebird esta instalado?

2. Como se que version esta instalada, para saber que puedo y no hacer?

Por ahora les tengo estas dos ;):D...

jhonny 12-07-2008 20:19:13

1) En la clave del registro de windows:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\FBDBServer_2_0_is1'
Hay una lista de todos los programas instalados en tu maquina:
Pero eso en ultimas no es muy seguro, ya que depende mucho de la forma en como hayan instalado el FB, incluso algunos lo pudieron hacer manualmente, la verdad es que yo no me preocuparía mucho por dicho asunto, pues un usuario que va a usar un software de este tipo, ya debe tener un mínimo de conocimiento al respecto....

2) Eso si es mas seguro, como lo que te preocupa es la estructura entre una versión y la otra de Firebird, pues lo que necesitas es averiguar la versión del ODS(On Disk Structure)...

Por ejemplo, la versión del ODS de Firebird 2.1 es la 11.1 y se averigua, así:
Código SQL [-]
  
select mon$ods_major, mon$ods_minor from mon$database

felipe88 14-07-2008 15:42:19

Bueno jhonny gracias por tu aporte como siempre :)

El primer punto lo solucione por aca, solo verificando si el servicio esta corriendo.
Para el segundo punto bien; pero dado que aplica unicamente para esta version entonces como podria saberlo con anteriores?:confused::confused:... de igual forma estare investigando y manteniendolos al tanto...

felipe88 14-07-2008 17:00:47

Como puedo usar esto???... desde donde son ejecutados???

jhonny 14-07-2008 17:05:22

Gbak, GSec, ISQL y otros mas... son unas utilidades que se distribuyen con el Firebird, para fines distintos (Como generar backups, cambiar opciones de usuarios, acceder a la BD, parar o correr el servicio y muchas cosas mas), estos se encuentran en la carpeta de instalación del mismo FB...

La particularidad de estas utilidades es que se ejecutan desde la linea de comandos y si quieres trabajar con ellos, puedes enviarles parametros normalmente, como se haría con cualquier otra aplicación que se ejecute desde la linea de comandos.

jhonny 14-07-2008 17:08:13

Cita:

Empezado por felipe88 (Mensaje 300298)
Para el segundo punto bien; pero dado que aplica unicamente para esta version entonces como podria saberlo con anteriores?:confused::confused:... de igual forma estare investigando y manteniendolos al tanto...

Tienes razón, entonces... seguramente el truco 31 de David Esperalta te servira para dicho fin...

http://www.clubdelphi.com/trucos/ind...ll=0&scrollb=0

felipe88 14-07-2008 17:37:35

Cita:

Empezado por jhonny (Mensaje 300328)
Tienes razón, entonces... seguramente el truco 31 de David Esperalta te servira para dicho fin...

http://www.clubdelphi.com/trucos/ind...ll=0&scrollb=0

Muy bueno, pero tendria sus exepciones en este caso, ya que parte de la funcion es la ruta del ejecutable; algo que es muy variable y se vuelve al mismo punto... como se llama la carpeta, esta tambien depende de la version... inclusive si te actualizas conserva ambos directorios.
Pienso que ya se trataria de jugar con esta funcion y el FileExists buscando el ejcutable....:cool::rolleyes:

jhonny 14-07-2008 17:51:45

Cita:

Empezado por felipe88 (Mensaje 300342)
Muy bueno, pero tendria sus exepciones en este caso, ya que parte de la funcion es la ruta del ejecutable; algo que es muy variable y se vuelve al mismo punto... como se llama la carpeta, esta tambien depende de la version... inclusive si te actualizas conserva ambos directorios.
Pienso que ya se trataria de jugar con esta funcion y el FileExists buscando el ejcutable....:cool::rolleyes:

O simplemente preguntar al usuario, la primera vez, ¿Donde tiene instalado su FB?, sinceramente creo que ese es un aspecto aislado al verdadero proposito del proyecto, te sugiero, que te centres en primer lugar en el objetivo real del aplicativo y luego si, en las demas "monerias" ;).

felipe88 14-07-2008 18:01:02

Cita:

Empezado por jhonny (Mensaje 300354)
O simplemente preguntar al usuario, la primera vez, ¿Donde tiene instalado su FB?, sinceramente creo que ese es un aspecto aislado al verdadero proposito del proyecto, te sugiero, que te centres en primer lugar en el objetivo real del aplicativo y luego si, en las demas "monerias" ;).

Bueno si lo pense fue por algo... tienes razon con lo de preguntar al usuario, ademas la razon de estas "monerias" es poder determinar que puede y que no puede hacer el programa, me explico: dadas las diferencias notables entre las versiones del FB, haran que muchas de las "novedades" generen errores al no existir en otras; la idea es controlarlos desde la entrada... acaso no seria mejor asi :confused::rolleyes:;)

felipe88 14-07-2008 18:02:38

Puede parecer un poco "saturador" tratar de entender todas estas cosas al tiempo, pero pienso que si se puede ahorrar del mismo ya sera ganacia ;)...

jhonny 14-07-2008 19:14:58

Cita:

Empezado por felipe88 (Mensaje 300358)
Bueno si lo pense fue por algo... tienes razon con lo de preguntar al usuario, ademas la razon de estas "monerias" es poder determinar que puede y que no puede hacer el programa, me explico: dadas las diferencias notables entre las versiones del FB, haran que muchas de las "novedades" generen errores al no existir en otras; la idea es controlarlos desde la entrada... acaso no seria mejor asi :confused::rolleyes:;)

Pues si, tienes razón, pero de todas formas debes notar algo... que por lo menos si vas a hacer todo esto del monitoreo desde las nuevas tablas MON$, nadie que utilice una versión anterior a la FB 2.1, podrá usar el programa, ya que dichas tablas de monitoreo, no existían ;).

Por eso es que te he sugerido lo del ODS, con él sabrás que puedes usar y que no, por ejemplo en la versión 2.1 el ODS es 11.1 y en la 2.5 sera 11.2, pero no se si no he entendido como piensas hacer lo del monitoreo, pero como te digo, si es con las tablas MON$, "solo podrás" a partir de FB 2.1.

felipe88 15-07-2008 17:07:50

Cita:

Empezado por jhonny (Mensaje 300388)
Pues si, tienes razón, pero de todas formas debes notar algo... que por lo menos si vas a hacer todo esto del monitoreo desde las nuevas tablas MON$, nadie que utilice una versión anterior a la FB 2.1, podrá usar el programa, ya que dichas tablas de monitoreo, no existían ;).

Por eso es que te he sugerido lo del ODS, con él sabrás que puedes usar y que no, por ejemplo en la versión 2.1 el ODS es 11.1 y en la 2.5 sera 11.2, pero no se si no he entendido como piensas hacer lo del monitoreo, pero como te digo, si es con las tablas MON$, "solo podrás" a partir de FB 2.1.

Tienes razon jhonny :rolleyes:... y debo ser un poco mas aterrizado en el sentido del monitoreo, ya que si hablamos de versiones anteriores solo podria trabajar con las tablas RDB$ del sistema, pero entonces como podria sacarles provecho a estas...?:confused:

jhonny 15-07-2008 19:16:01

Cita:

Empezado por felipe88 (Mensaje 300598)
Tienes razon jhonny :rolleyes:... y debo ser un poco mas aterrizado en el sentido del monitoreo, ya que si hablamos de versiones anteriores solo podria trabajar con las tablas RDB$ del sistema, pero entonces como podria sacarles provecho a estas...?:confused:

Las RDB$ te sirven para muchas cosas, pero no para el monitoreo que quieres hacer, dicho monitoreo seguramente lo podrías trabajar en versiones anteriores utilizando la API de Firebird, pero la verdad es que podría resultar bastante engorroso, en comparación a como se hace hoy por hoy, con la versión 2.1.

felipe88 24-07-2008 16:13:05

Hola compañeros,

Aunque cada vez tengo menos tiempo para sacar esta idea adelante, recurro de nuevo a ustedes para que me asesoren y me saquen de mis dudas...

1. Como conecto correctamente la bd y ejecutar los query?, lo hacia de este modo dejando las otras configuraciones (DBExpress) ya hechas.
Código Delphi [-]
SQL.Conexion.ConnectionName := 'C:\basedatos\basedatos.fdb';
SQL.Conexion.Connected;
Pero claro esta que me falta algo para poder ejecutar el query sin errores; que es?

2. Como podria saber que tablas tiene la base de datos, mediante una consulta SQL?

3. Retomando lo de las tablas RDB$, que herramientas se podrian brindar para versiones anteriores a la 2.1 ?, teniendo en cuenta claro que estas son mas que todo consultas que al fin de cuentas se podrian hacer sin problemas, y es precisamente lo que quiero cambiar; no tendria ninguna gracia un programa que haga lo mismo que podrias hacer de igual forma sin el, es ahi donde quiero hacer algo diferente... Aun estoy pensando eso :rolleyes:, alguna idea??

felipe88 24-07-2008 22:19:59

:o... aun no encuentro nada al respecto, y no tengo donde probar en este momento :(...

Alguna idea para el punto uno :confused:

felipe88 25-07-2008 22:11:53

Es mas simple realizar un procedimiento que recorra los resultados de las tablas al consultar la bd para realizar esto?

rmora03 06-05-2011 20:15:19

Cita:

Empezado por jhonny (Mensaje 299663)
En la carpeta doc que distribuyen con Firebird 2.1, hay un archivo llamado "README.monitoring_tables.txt", en él encontraras lo necesario ;).

Hola Johnny, te comento un problema que tengo al realizar la consulta a la tabla de monitoreo MON$ATTACHMENTS especificamente para consultar cuantos usuarios estan conectados a mi DB. Ejecuto la sentencia y efectivamente me muestra la cantidad de usuarios que estan conectados en ese momento, sin embargo conforme los usuarios se conectan y desconectan ese valor no cambia, es como si ese dato lo carga al momento en que ingreso al sistema y no cambia conforme al comportamiento de los otros usuarios.

Estoy utilizando el BDE para conectarme, no estoy seguro si esto tiene algo que ver.

Saludos

Randall

guillotmarc 06-05-2011 21:03:10

Cita:

Empezado por rmora03 (Mensaje 399223)
Hola Johnny, te comento un problema que tengo al realizar la consulta a la tabla de monitoreo MON$ATTACHMENTS especificamente para consultar cuantos usuarios estan conectados a mi DB. Ejecuto la sentencia y efectivamente me muestra la cantidad de usuarios que estan conectados en ese momento, sin embargo conforme los usuarios se conectan y desconectan ese valor no cambia, es como si ese dato lo carga al momento en que ingreso al sistema y no cambia conforme al comportamiento de los otros usuarios.

Estoy utilizando el BDE para conectarme, no estoy seguro si esto tiene algo que ver.

Saludos

Randall

Hola.

¿ Vuelves a lanzar la consulta ?, es que tienes que volver a lanzar la consulta para leer de nuevo los valores de las tablas de monitorización.

Además, es muy probable que tengas que cerrar y volver a abrir la transacción. Puesto que según el nivel de aislamiento que utilices, cada transacción es como si tuviera su propia copia de la base de datos, y no se ve afectada por los cambios introducidos desde otras transacciones. Así que si quieres ver los nuevos registros introducidos en una tabla, tienes que cerrar esa transacción y verlos desde una nueva transacción.

Saludos.

rmora03 07-05-2011 02:02:43

Hola Marc

Lo solucioné desconectando y volviendo a conectar la conexión en el Data modulo. Gracias por tus consejos.

Saludos


La franja horaria es GMT +2. Ahora son las 20:12:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi