SQL Server Performance

Optimizador de Base de datos

Discussion in 'Preguntas sobre SQL Server en Español.' started by wilcor83, May 8, 2005.

  1. wilcor83 New Member

    Saludos .. ..<br />les escribo por que tengo una duda .. lo que pasa es que estoy haciendo un proyecto que trata de hacer un optimizador de base de datos ... y uno de los puntos a tocar es sobre eliminacion de inidices no usados ..... para hacer la aplicacion estamos recuperando la metadata del SQL SERVER 7.0 .. pero por mas que busco informacion de como obtener el porcentaje de utilizacion de indices no lo en****ro .. salvo en esta pagina que me dicen una manera pero atravez del tunin index wizar .. .. pero lo que en relidad estoy buscando es como poder implementar una funcion que permita localizar el porcentaje de uso de los indices pero como usuario DBA no como SYS ...<br />espero me puedan ayudar con esta duda que por mas que busco info no la encuentro ...<br />Otra duda que tengo es para ver el rendimiento de las sentencias .. queziera saber como es que hace el SQL Sqerver para calcualar su rendimiento, es decir como se implementa el EXecution plan pues el proyecto tambien abarca este tema y tampoco puedo encontrar informacion acerca de este tema ...<br />espero me puedan ayudar ... les agradezco por adelantado , y tambien les agadezco el hecho de leer este mensaje ...<br />gracias !!![<img src='/community/emoticons/emotion-1.gif' alt=':)' />] <br />willy Cornejo <img src='/community/emoticons/emotion-5.gif' alt=';)' />
  2. Luis Martin Moderator

    Willy,

    La única forma conocida, más o menos sistematizada, es la del artículo que se encuentra en este Forum (está en español).

    Con respecto a execution plan son rutinas internas de SQL que, hasta donde yo se, no se encuentan disponibles en ninguna documentación.

    Saludos,








    Luis Martin
    Moderator
    SQL-Server-Performance.com

    One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important
    Bertrand Russell


    All postings are provided “AS IS” with no warranties for accuracy.



  3. c_maldon Member

    La metadata de la base de datos es solo descriptiva. No te aporta información del uso o de la forma de uso.

    Tal vez lo que estés buscando se encuentre en los valores que dejan las trazas del SQL Profiler, tu aplicación podría recorrer la traza, interpretarla y tener la inteligencia de optimizar.

    Por ejemplo dejas corriendo un sistema con trazas una semana, y luego la analizas con tu aplicación, dentro de la traza podés gusrdar el plan de ejecución y recorriendolo (no digo que sea tarea facil) te va a decir que indices se utilizaron y en que forma.

    Saludos
  4. wilcor83 New Member

    Antes que nada agracerles por el hecho de ayudar con su experienciencia , yo recien empiezo con esto y la verdad que lo que se es por lo que he investigado pues es un proyectos con fines educativos en cual he propuesto.[<img src='/community/emoticons/emotion-5.gif' alt=';)' />]<br />Con respecto a las respuestas...<br />ok, voy a intentar la solución que m planteas , tenia pensado algo parecido pero tenia que que estar seguro que tal informacion(de las trazas) no se encontreba almacenada en alguna de las tablas para el manejo de la metadata. Esta información sobre el porcentaje de utilizacion donde es alamacenada [?][?], en un primer momento pense que la info se podria encontrar en las tablas tempb, pero la verdad que no me he puesto a indagar por alli, .. tengo otra pregunta cuando he estado haciendo mi investigación sobre esto me encontre con unos procedimientos que del tipo ' DBCC ' es posible ver que contienen tales sentencias [?][?] es decir como estan implementadas[?] pues hay algunas que me sevirian de mucha utilidad pero necesito saber como hacen para sacar tal información.<br />Una pregunta mas en la tabla de sysobjects he visto que hay una columna cuyo nombre es seltrig.. aguno sabe que info se almacena aqui [?][?] o que procedimientos almacendos (del sql server) la usan.<br />gracias <br />willy Cornejo [<img src='/community/emoticons/emotion-5.gif' alt=';)' />]
  5. Luis Martin Moderator

    Creo que puedes encontrar la información que buscas en los Libros On Line de SQL Server.

    No obstante, para ser sincero, es muy difícil llevar a cabo tu proyecto.

    Por un lado, no existe herramienta paga, que realize el trabajo del Profiler y del Index Tunign Wizard.

    Por otro lado, no existe ninguna herramienta, store procedure o software de terceros que analize el uso de los índices de una base de datos.

    Te comento estas cosas, dado que he buscado mucha información y software de terceros que permita realizar esas funciones, como alternativa de las ofrecidas por SQL sin encontrar alguna.

    Pero, quién sabe?, quizas tu puedas ser el primero. Ojalá así sea.




    Luis Martin
    Moderator
    SQL-Server-Performance.com

    One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important
    Bertrand Russell


    All postings are provided “AS IS” with no warranties for accuracy.



  6. wilcor83 New Member

    hola !! bueno uds saben como puedo crear un procedimiento almacenado que se ejecute en una fecha determinada en la base de datos [?] espero me puedan ayudar.<br />gracias !<br />willy cornejo [<img src='/community/emoticons/emotion-5.gif' alt=';)' />]
  7. Luis Martin Moderator

    Si, puedes usar un job agendado con el procedimiento almancenado para que se ejecute en la fecha que tu quieras.


    Luis Martin
    Moderator
    SQL-Server-Performance.com

    One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important
    Bertrand Russell


    All postings are provided “AS IS” with no warranties for accuracy.



  8. wilcor83 New Member

    Hola a todos ! bueno esta vez me dirijo a uds porque tengo una duda, no se asi alguno de uds sabe (si es que se pude ) como hacer para saber el numero de accesos que a ocurrido en una tabla, accesos me refiero al total de inserts, updates, select que a ocurido sobre alguna tabla específica ...<br />espero me puedan ayudar con esta gran duda que tengo [<img src='/community/emoticons/emotion-5.gif' alt=';)' />]<br />willy[<img src='/community/emoticons/emotion-5.gif' alt=';)' />]
  9. Luis Martin Moderator

    Quizás con un trigger que cuente cada insert, update o select.


    Luis Martin
    Moderator
    SQL-Server-Performance.com

    One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important
    Bertrand Russell


    All postings are provided “AS IS” with no warranties for accuracy.



  10. wilcor83 New Member

    ok pero hay un problema, no se puede detectar los selects con triggers, talvez este equivocado, y si lo estoy espero me puedas ayudar con esto .. como dedecto un select con triggers[?] , espero me puedas ayudar gracias!<br />ah ! otra cosa no se si me pudieran decir como es que el sql server maneja las fachas por que una vez pude insertar una fecha pero ahora me sale error de formato <img src='/community/emoticons/emotion-6.gif' alt=':(' /> .... y no me acuerdo como lo hice en un principio <img src='/community/emoticons/emotion-7.gif' alt=':S' /> ... bueno me despido y una vez mas gracias por contestar a mis dudas [<img src='/community/emoticons/emotion-5.gif' alt=';)' />]<br />willy cornejo T.[<img src='/community/emoticons/emotion-5.gif' alt=';)' />]
  11. Luis Martin Moderator

    Tienes razón con respecto al select. Trigger es solamente para insert, delete o update.

    Con respecto a las fechas tienes que mirar la configuración regional del SO.


    Luis Martin
    Moderator
    SQL-Server-Performance.com

    One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important
    Bertrand Russell


    All postings are provided “AS IS” with no warranties for accuracy.



  12. wilcor83 New Member

    y existe alguna forma de detectar cuando se haces algun select en alguna tabla ?? lo que pasa es que necesito hayar el numero de accesos que una tabla especifica ha tenido ..<br />espero me puedan ayudar .<br />gracias !<br />willy cor[<img src='/community/emoticons/emotion-5.gif' alt=';)' />]nejo
  13. Luis Martin Moderator

    El profiler detecta cada instrucción ejecutada, el problema que el select puede tener más de una tabla y además con joins lo cual implica una especie de tabla temporaria. Adicionalmente, si un select de una tabla ya se encuentra en memoria no existe nuevo acceso a esa tabla, lo cual complica saber cuando se realiza un select sobre alguna tabla.


    Luis Martin
    Moderator
    SQL-Server-Performance.com

    One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important
    Bertrand Russell


    All postings are provided “AS IS” with no warranties for accuracy.



  14. wilcor83 New Member

    ahora tengo otro prblemita .. he ceado un job cuya funcion es insertar una fila en una tabla , pero este nunca se ejecuta <img src='/community/emoticons/emotion-7.gif' alt=':S' /> , le he agreagado steps y shedule pero no hace nada ... q es lo q puedo hacer .. sabe alguno por que ocurre esto y como puedo solucionarlo?? <br />espero me puedan ayudar [<img src='/community/emoticons/emotion-5.gif' alt=';)' />]<br />willy Cornejo[<img src='/community/emoticons/emotion-5.gif' alt=';)' />]
  15. Luis Martin Moderator

    Tienes levantado el sqlagent?.
    Lo agendaste para una hora o fecha fija?
    Algún error en el Visor de Eventos o el Log de SQL?


    Luis Martin
    Moderator
    SQL-Server-Performance.com

    One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important
    Bertrand Russell


    All postings are provided “AS IS” with no warranties for accuracy.



  16. wilcor83 New Member

    Hola ! al parecer no esta levantado el SQL Agent ..<img src='/community/emoticons/emotion-7.gif' alt=':S' /><br />gacias por la ayudadita [<img src='/community/emoticons/emotion-5.gif' alt=';)' />] ...<br />Tengo otra duda..<br />esta vez tengo otro probelita con el comendo DBCC PERFMON .. pues quiero capturar el resultado de tal sentencia en una table pero lo malo es que tal sentencia arroja al parecer varios Result Set, y la verdad no se como pudeo capturarlos en una tabla o en varias tablas ... he usado el: <br />CREATE TABLE #memusagerecord<br />(<br />Statistic varchar(100),<br />Value float,<br />)<br />INSERT INTO #memusagerecord EXEC('DBCC PERFMON')<br />select*from #memusagerecord <br />drop table #memusagerecord <br />drop table PerfMonStats <br />Siempre me sale el siguiente error<br />Server: Msg 213, Level 16, State 7, Line 1<br />Insert Error: Column name or number of supplied values does not match table definition.<br />Que por lo visto indica que el numero de columnas no concuerda con el nume ro de columnas de la tabla, esto sale pues como ecribi lineas arriba tal sentencia (PERFMON) arroja varios resultados .<br /> A mi lo que me intesa capturar es la tasa de aciretos de cahe (hit Ratio ).<br />espero me uedan ayudar [<img src='/community/emoticons/emotion-5.gif' alt=';)' />]<br />Gracias de atemano !<br />Willy Cornejo
  17. Luis Martin Moderator

    El lugar del DBCC te sugiero:
    select * from sysperfinfo.
    En esa tabla están todos los contadores de SQL.


    Luis Martin
    Moderator
    SQL-Server-Performance.com

    One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important
    Bertrand Russell


    All postings are provided “AS IS” with no warranties for accuracy.



  18. wilcor83 New Member

    hola [<img src='/community/emoticons/emotion-5.gif' alt=';)' />]<br />Esta vez escribo por que me toy pelendo con un job que he creado <img src='/community/emoticons/emotion-7.gif' alt=':S' />...<br />el job lo que hace o deberia hacer ejecutar un procedimiento almacenado ...<br />la primera vez bien lo hace , pero luego no lo hace mas <img src='/community/emoticons/emotion-7.gif' alt=':S' />.... es decir en el siguiente dia que le toca ejecutar no inserta a pesar que el resltado fue exitoso ...<br />no se que puedo hacer para que pueda ejecutar .. <br />les mando el codigo aver si desifran en que esta fallando y me puedan ayudar .. gracias !![<img src='/community/emoticons/emotion-5.gif' alt=';)' />]<br /><br />msdb.dbo.sp_add_job 'VicuDB' ,@enabled = 1 ,@description = 'desc'<br /><br />msdb.dbo.sp_add_jobstep @job_name = 'VicuDB_nombre' ,@step_name = 'VicuDB_Testeo_nombre' ,@subsystem = 'TSQL',@command = 'exec VicuDB_Inserta_Fila_testeo ''nombre'', ''sdf.format(fecIni)'',''sdf.format(fecFin)'',4,''hola'',1', @database_name='NombreDB',@retry_attempts = 5 ,@retry_interval = 5 <br /><br />msdb.dbo.sp_add_jobschedule @job_name = 'VicuDB_nombre' ,@name = 'VicuDB_Periodo_Testeo_nombre' ,@freq_type = 4 ,@freq_interval = 1 ,@active_start_date= "+sdf.format(fecIni)+" ,@active_end_date="+ sdf.format(fecFin) +" ,@active_start_time="+sdfHoras.format(fecIni)+" ,@active_end_time="+sdfHoras.format(fecFin)<br /><br />msdb.dbo.sp_add_jobserver @job_name = 'VicuDB_nombre' ,@server_name='servidor'<br /><br />lo q dice sdfHoras.format(fecIni) no se preocupen pues esto lo hago desde neatbeans,, todo sales bien como les dije inserta el job, el jobstep, jobshedule y el servidor,... salen todos ok ... <br />pero solo se ejecuta ese dia , en este caso se debe ejecutar diariamente hasta la fechaFin lo cual no lo hace :$..a pesar que todos sus resultados figuran como exitosos ..<br /> ¿q esta mal ???<br />wily cornejo Torero [<img src='/community/emoticons/emotion-5.gif' alt=';)' />]<br /><br />
  19. Luis Martin Moderator

    Te sugerio cambiar ,@freq_interval = 1 por 4.

    Probá y contame.


    Luis Martin
    Moderator
    SQL-Server-Performance.com

    One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important
    Bertrand Russell


    All postings are provided “AS IS” with no warranties for accuracy.



  20. wilcor83 New Member

    Hola ! ... bueno supongo me habran extrañado .. jejeeje..<br />esta vez les escribo a uds pues tienen mayor experiencia en esto que yo .. debido a que recien he empezado con mi investigacion para la realizacion de un optimizador de bases de datos ..(que es mi tema de tesis) .. acudo a uds debido a q desearia me escribieran indicandome que es lo q un dba necesita en una aplicación para optimización de bases de datos.. uds tienes mayor experiencia y han estado investigando por mucho mas tiempo que yo. <br />hasta el momento mi aplicacion realiza lo sgte:<br />- creacion de indices, archivos, grupo de archivos.<br />- desfragmentación (reorganizacion )de indices.<br />- muestra los recursos usados por las sentencias.(esta parte aun le falta mejorarla)(que creerían uds conveniente muestre en este punto ???)<br />- muestra reportes graficos sobre los acirtos de cache, y uso de CPU en un periodo dado (esto en el caso de SQL server), en el caso de oracle es por Table SPace y ademas se muestra el uso de memoria.<br />- En caso de Oracle eliminacion de indices no usados (esto no esta implementado en SQL SErver pues no encuentro aun manera de hacerlo <img src='/community/emoticons/emotion-7.gif' alt=':s' />)<br />- Se puede puede conectar a varias bases de datos tipo Oracle o Sql Server.<br />Hasta ahora esto es lo que he avanzado, me parece que podria agragale algunas cosas mas, por ello acudo a uds que se desempeñan como DBA's pues tienen una visión mas panorámica de lo que deben de hacer este tipo de productos...<br />espero uds puedan aportar con sus ideas....<br />bueno de antemano les agradezco tan solo el hecho de darme un poco de su tiempo .. y ademas por la ayuda que me puedan brindar.<br />GRACIAS <br />Willy Cornejo Toreo <img src='/community/emoticons/emotion-5.gif' alt=';)' />
  21. Luis Martin Moderator

    Algunos puntos para agregar:

    1) Cola de los discos.
    2) Cola del Procesador o procesadores.

    Si miras el Monitor de Performance encontrarás algunas ideas más.

    Con respecto a los índices no usados, es cierto SQL no tiene esa posibilidad.
    Podrás encontrar en los artículos en castellano un acercamiento al tema.

    Saludos,

    Luis Martin
    Moderator
    SQL-Server-Performance.com

    One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important
    Bertrand Russell


    All postings are provided “AS IS” with no warranties for accuracy.



  22. c_maldon Member

    Tambien prodría ser interesante el tema de bloqueos e interbloqueos. Que ayude a reastrear la causa de un bloqueo y muestre el nivel de isolación que utiliza la aplicación.
    Y un monitor que muestre un mapa de seguridad del server y las bases, como por ejemplo que usuarios acceden por roles fijos de servidor y de base de datos y cuales por roles de usuario, que usuarios pueden realizar modificaciones DDL y cuales DML.
    O dado un objeto quien que pueden hacer los usuarios con el. Ya sea porque tienen permisos directos o indirectos.
    Tambien lo permisos a public que no deberían ser modificados.
  23. saz83 New Member

    hola, ke tal, voy a realizar un proyecto en el ke una base de datos de sql server se actualizará con los datos de una bd en oracle, así ke necesito toda la información posible sobre como hacerlo. además aun no he creado la bd en sql server, así como tambien la bd en sql server no contendrá todas las tablas de la bd de oracle.si alguno de ustedes sabe, favor de indicarme donde conseguir informacion y/o explicarme como hacerlo, de antemano, gracias.

    SeLeNe
  24. Luis Martin Moderator

    Se:

    En la próxima oportunidad te sugiero que inicies un nuevo post. Esto captará mayor atención a los miembros del Forum.

    Con respecto a la pregunta, tienes que investigar el DTS ( en el Administrador Coorporativo) para transferir de Oracle a SQL Server.


    Luis Martin
    Moderator
    SQL-Server-Performance.com

    One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important
    Bertrand Russell


    All postings are provided “AS IS” with no warranties for accuracy.



Share This Page