Estadísticas con procedimientos almacenados

Lo primero decir que he empezado hace una semana a aprender sql server :) .Tengo un problema, te comento. Quiero hacer un programa para poder solucionar problemas de rendimiento de la base de datos. Para ello antes de nada quiero sacar las estadísticas con la máxima cantidad de datos posible (desde la cantidad de espacio extrautilizado por inserciones, hasta el desorden creado y los errores). Para ello había pensado hacer un procedimiento almacenado, el cual se iba a ejecutar todos los días (con un job). Mi problema viene a la hora de hacer el procedimiento almacenado. Se que sql server dispone de una serie de herramientas para las estadísticas como set statistics io, set showplan all, sqlmaint. Pero no se utilizarlas para crear el procedimiento almacenado, y tampoco se donde me saldría el resultado. Si me podrías dar una idea de como hacerlo, te lo agradecería. Eso es todo (que ya es bastante).
1

1 Respuesta

6.325 pts. Ingeniero técnico en Informática
No, no, todo está claro.
La primera parte (- tengo que sacar las estadísticas a tablas), se responde con lo que te respondí en primer lugar.
El problema radica en saber de donde extraer esa información y eso es complicado.
¿Sabemos dónde guarda Sql-Server esos datos? A ciencia cierta no, no es algo que ellos expliquen o hayan documentado
detalladamente. Lo que te quería decir, es que con tiempo, con bastante tiempo,
si te estudias el procedimiento que tu comentas, p/ejemplo (sp_createstat (elige master -> procedimientos almacenados
y doble click sobre el sp_createstat), verás que utiliza una serie de tablas como son sysobjects
sysindexes, syscolumns, systypes, sysindexes entre otras. Si te los estudias, sacas las relaciones entre ellas, conseguirás sacar esa información. Es la manera de saber donde alberga él toda la información que
te muestra en la ventanita de resultados (concretamente en la pestaña de mensajes) y
que no tenemos manera de insertar en las tablas de tu BD. Para empezar, echale un vistazo a la tabla sysprocesses, que está en la master y verás más claro lo que te quiero decir.
Por eso, te decía que lo ideal sería
select * into tutabla
From MUESTRA_ESTADISTICAs,
pero eso no existe, al menos que yo sepa.
Por eso, también te comentaba que había una tercera vía, en la que para intentar recoger esos resultados, debieras utilizar la
función ODBC SQLGetDiagRec, lo que significa tratar funciones ODBC, que a su vez implica programa en C y
que quizá pudieras encapsular en un procedimiento extendido.
Respecto a la segunda pregunta, eso ya es muy sencillo. Ya tenemos las estadísticas en tus tablas,
lo único que debemos hacer es un DTS para exportar esos datos al formato que queramos, Excel, Texto, Oracle, lo que sea.
Para ello, botón derecho sobre la tabla a exportar -> exportar dts y comienzas con el Wizard. Verás que es muy sencillo.
Luego, todo el DTS (Data Transformation Services) lo puedes guardar e incluso dejar programado, com si fuera un job más.
Espero que te haya aportado algo de luz en el túnel. Mantenme informado de tus progresos.
No he entendido bien lo que me comentas. No me he explicado bien. Lo que quiero es hacer un procedimiento almacenado, ya están hechas todas las tablas, es una bd que lleva en funcionamiento mucho tiempo, solo le quiero sacar las estadísticas a diario, y más adelante hacerle un histórico de estadísticas, para que una vez a la semana se miren y se pueda corregir rendimiento por espacio extra o por desordenacion de indices.
Es decir, no se hacer el procedimiento almacenado para que me saque las estadísticas de las tablas que tenemos en la bd, para que me las saque en formato excel o txt, y después yo ya poder manejarlas o manipularlas a mi gusto. No tengo hecho por ahora ningún prcedimiento almacenado, y lo peor es que no se ni como empezarlo.
Es que estoy venga que mirar en los books, pero no saco nada en claro de como hacer el procedimietno almacenado.
Muchas gracias por tu atención, y perdona por las molestias.
Muchísimas gracias, voy a intentar hacer lo que me has dicho, pero lo dejare ya para el lunes, que ahora me tengo que ir. Me has sido de gran ayuda, te agrego y me quedo con tu nombre para molestarte con alguna duda que me ira surgiendo. Mejor explicado imposible. Muchas gracias, de verdad. Saludos.
Quizá yo entendí mal y pensé que lo que querías es que esa información que te dan los comandos set statistics io, set showplan_all, set statistics time cuando los activas, no sabías como guardarla y/o recuperar, para sacar posteriormente scar unas estadísticas cada por tiempo.
Entonces, por lo que me comentas ahora entiendo que esa información ya la tienes correctamente almacenada en tablas y que lo único que quieres es crear un trabajo que periódicamente te lo exporte a un Excel/Txt, ¿no?.
Coméntame si es así y continuamos.
Hasta ahora.
Yo lo único que tengo son las tablas (de la base de datos) con los datos. Y de esos datos quiero sacar las estadísticas antes mencionadas. Yo había pensado hacerlo con un procedimiento almacenado, o utilizar los que ya exiten, como sp_createstat y demás, solo que no se donde guardan los datos esos procedimientos.
Es decir,
- Tengo que sacar las estadísticas a tablas,
-y de tablas a excel o .txt.
No se hacer ninguna de las dos cosas.
La primera no la se hacer porque no se que procedimientos ya creados utilizar para conseguir las estadísticas (o crearme nuevos sp)
Y la segunda no la se hacer porque ni siguiera lo he mirado, primero quiero hacer lo primero.
Perdona, pero como te podrás haber dado cuenta no me expreso muy bien.
Gracias. Saludos.
Menos mal que 'sólo' hace una semana que has empezado a aprender Sql-Server, veo que te ha cundido :-)
Respecto a la pregunta que me planteas, lo ideal sería saber en qué tablas guarda Sql-Server toda esa información que te muestra. Hay veces, que cuando estudias como está codificado algún procedimiento almacenado de, por ejemplo, la master, entiendes o descubres, como guarda él la información que te está mostrando en la vista de resultados. De esta manera, podrías copiar el código y el select resultante, lo insertarías en las tablas que tu hayas dispuesto a tal efecto. Pero en este caso, yo no he encontrado tablas susceptibles de albergar esa información, he estado viendo también los procedimientos relacionados, sp_autostats, sp_create y todos esos y no parecía haber una tabla ex-proceso. Tendrías que ver cual es la relación entre todo su modelo.
Otra forma, sería, que el resultado de las estadísticas, lo pudieras insertar directamente a una tabla tuya, de la manera:
select * into tutabla
From SET SHOWPLAN_ALL on,
pero esto no se puede hacer.
Y la tercera vía, debiera ser
Utilizar SQLGetDiagRec de ODBC, lo que significa tratar funciones ODBC, que a su vez implica programa en C y que quizá pudieras encapsular en un procedimiento extendido.
La verdad es que es un poco complicado recuperar esos datos, para tus posteriores análisis y demás y eso, lo tendrían que haber hecho más fácil de utilizar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas