Administracion Sql Server https://www.dataprix.com/ es Cómo generar sentencias SQL de administración para eliminar tablas y vistas https://www.dataprix.com/blog-it/carlos/como-generar-sentencias-sql-de-administracion-para-eliminar-tablas-y-vistas <span class="field field--name-title field--type-string field--label-hidden">Cómo generar sentencias SQL de administración para eliminar tablas y vistas</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="Ver perfil del usuario." href="/user/carlos" lang="" about="/user/carlos" typeof="schema:Person" property="schema:name" datatype="" class="username">Carlos</a></span> <span class="field field--name-created field--type-created field--label-hidden">13 Febrero, 2021 - 20:05</span> <div class="clearfix text-formatted field field--name-field-mt-pst-subheader field--type-text-long field--label-hidden field__item"><p>Construcción automatizada de sentencias SQL</p></div> <div class="clearfix text-formatted field field--name-field-mt-pst-body field--type-text-with-summary field--label-hidden field__item"><p>Los metadatos que guardan las bases de datos sobre la estructura de sus objetos son muy útiles para realizar tareas que requieran hacer algo sobre todos los objetos de un esquema, de una base de datos, de un tipo determinado, con un patrón en el nombre del objeto, etc.</p> <p>En SQL Server, con las vistas que la base de datos nos da sobre el catálogo podemos consultar, entre otras muchas cosas, los nombres de objetos de las bases de datos como tablas o vistas.</p> <p>Si lo que queremos hacer es eliminar todas las tablas y vistas de un determinado esquema de una base de datos 'DBName', por ejemplo, conectados a DBName o incluyendo el nombre de la base de datos en la consulta, podemos consultar en las vistas de sistema de <strong>SYS.OBJECTS</strong> y <strong>SYS.SCHEMA</strong> de objetos y esquemas, respectivamente, para construir nuestras sentencias de DROP Table en un segundo.</p> <p><img alt="" data-entity-type="" data-entity-uuid="" src="/files/users/user2/Generate-dynamic-drop-tables-sql-server.JPG" /></p> <h3>Consulta de ejemplo para generar DROPS de las tablas y vistas de dos esquemas</h3> <pre> select 'DROP ' + CASE type WHEN 'U' THEN 'Table' WHEN 'V' THEN 'View' END + ' [' + sc.name + '].[' + ob.name + '];' from DBName.sys.objects OB join DBName.sys.schemas SC on OB.schema_id=SC.schema_id where sc.name in ('dbo','USER') and ob.type in ('U','V') order by ob.type, ob.name</pre><p>Esta sentencia nos devuelve montadas las consultas para todas las tablas y vistas que contengan los esquemas incluídos en el IN, en este caso 'dbo' y 'User', de la base de datos con mobre 'DBName'.</p> <p>Después sólo es cuestión de copiar las queries generadas, revisarlas, sobretodo teniendo en cuenta que son DROPs, e incluirlas en nuestro script, o ejecutarlas directamente desde el SSMS, por ejemplo.</p> <p> </p> <h4><strong>Tabla de codificación para tipos de objeto de SYS.OBJECTS</strong></h4> <p>Como ayuda, esta es la codificación de los tipos de objetos que podemos encontrarnos en la vista sys.objects, en el campo 'type'. En nuestro caso hemos filtrado por 'Tablas de usuario' y 'Vistas' con 'U' y 'V'.</p> <table><caption><strong>Tabla de codificación para tipos de objeto de SYS.OBJECTS de SQL Server</strong></caption> <tbody><tr><td>Tipo de objeto: <p> AF = Función de agregado (CLR)<br /> C = restricción CHECK<br /> D = DEFAULT (restricción o independiente)<br /> F = Restricción FOREIGN KEY<br /> FN = Función escalar de SQL<br /> FS = Función escalar del ensamblado (CLR)<br /> FT = Función con valores de tabla de ensamblado (CLR)<br /> IF = Función SQL insertada con valores de tabla<br /> IT = tabla interna<br /> P = Procedimiento almacenado de SQL<br /> PC = Procedimiento almacenado del ensamblado (CLR)<br /> PG = Guía de plan<br /> PK = Restricción PRIMARY KEY<br /> R = Regla (estilo antiguo, independiente)<br /> RF = Procedimiento de filtro de replicación<br /> S = Tabla base del sistema<br /> SN = Sinónimo<br /> SO = Objeto de secuencia<br /> U = Tabla (definida por el usuario)<br /> V = Vista<br /> EC = restricción perimetral</p> <p> <strong>Válido para</strong> : SQL Server 2012 (11.x) y versiones posteriores.<br /> SQ = Cola de servicio<br /> TA = Desencadenador DML del ensamblado (CLR)<br /> TF = Función con valores de tabla SQL<br /> TR = Desencadenador DML de SQL<br /> TT = Tipo de tabla<br /> UQ = Restricción UNIQUE<br /> X = Procedimiento almacenado extendido</p> <p> <strong>Se aplica a</strong>: SQL Server 2016 (13.x) y versiones posteriores, Azure SQL Database , Azure Synapse Analytics (SQL Data Warehouse) , Almacenamiento de datos paralelos .<br /> ET = tabla externa</p></td> </tr></tbody></table><p> </p> <h3>Una alternativa, generar SQL con INFORMATION_SCHEMA</h3> <p>Utilizando las vistas de INFORMATION_SCHEMA se podría conseguir lo mismo y con una consulta más sencilla, pero mejor ir acostumbrándose a las vistas de sys, que son las más fiables, y las que parece que van a quedarse a la larga.</p> <h3>Ejemplo para crear DROP de tablas dinámico con INFORMATION_SCHEMA</h3> <pre> SELECT 'DROP ' + right(table_type,5) + ' [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '];' FROM DBName.INFORMATION_SCHEMA.TABLES where table_schema not in ('dbo','USER') order by table_schema, table_type, table_name</pre><p> </p> <h2>Las vistas del catálogo te pueden ahorrar mucho tiempo</h2> <p>Esta es una aplicación típica que pongo como ejemplo, pero utilizar las vistas del catálogo para generar consultas dinámicamente nos puede ahorrar un montón de tiempo y asegurarnos de que no nos dejamos nada en muchas tareas de administración de la base de datos que requieran consultar o realizar acciones sobre grupos de objetos.</p> <p>Por último, en el post de <a href="https://www.dataprix.com/es/blog-it/carlos/consultas-utiles-sql-server-administracion-y-desarrollo">Consultas Útiles para SQL Server</a> hay otras consultas sobre el catálogo, que combinadas con esta manera de generar queries de administración pueden ahorrar mucho trabajo y facilitar la administración o el desarrollo con SQL Server.</p> <p> </p> </div> <div class="field field--name-field-tecnologia field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix field__items"> <div class="field__item"><a href="/tecnologia/plataforma-de-datos" hreflang="es">Plataforma de datos</a></div> </div> <div class="field field--name-field-it-tags field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix field__items"> <div class="field__item"><a href="/it-tags/administracion-sql-server" hreflang="es">Administracion Sql Server</a></div> <div class="field__item"><a href="/it-tags/sql-server" hreflang="es">SQL Server</a></div> <div class="field__item"><a href="/it-tags/dba" hreflang="es">DBA</a></div> <div class="field__item"><a href="/it-tags/dml" hreflang="es">DML</a></div> </div> <section class="field field--name-field-mt-pst-comment field--type-comment field--label-hidden comment-wrapper"> </section> Sat, 13 Feb 2021 19:05:34 +0000 Carlos 208064 at https://www.dataprix.com SQL Server 2016, novedades https://www.dataprix.com/blog-it/ilmasacratore/sql-server-2016-novedades <span class="field field--name-title field--type-string field--label-hidden">SQL Server 2016, novedades</span> <div class="field field--name-field-tecnologia field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix field__items"> <div class="field__item"><a href="/tecnologia/plataforma-de-datos" hreflang="es">Plataforma de datos</a></div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="Ver perfil del usuario." href="/user/ilmasacratore" lang="" about="/user/ilmasacratore" typeof="schema:Person" property="schema:name" datatype="" class="username">il_masacratore</a></span> <span class="field field--name-created field--type-created field--label-hidden">15 May, 2015 - 17:33</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>La próxima versión de Microsoft SQL Server 2016 parece que se va a poder ver ya este verano, primeramente en formato preview. Con el cambio de versión se incluyen como siempre nuevas características entre las que destacan mejoras relacionadas con su integración con Microsoft Azure, integración con el lenguaje de programación estadístico R y alguna cosa más en cuanto a mejoras de rendimiento. A continuación una breve reseña: </p> <ul><li><strong>Always Encripted</strong><br /> Nuevo método de protección para mejorar la seguridad de los datos tanto cuando están almacenados como cuando están en tránsito. Con Always Encripted se harán ciertas operaciones sobre la información encriptada o en el peor de los casos usando una clave de encriptación que se almacena en la aplicación cliente. Es algo totalmente orientado a Azure y para evitar miradas indiscretas sobre nuestra información.<br />  </li> <li><strong>Strech Database</strong><br /> Relacionado también con Microsoft Azure, Strech Database nace para flexibilizar el almacenado de la información menos "caliente" y de alguna manera poder reducir su consumo de recursos (su almacenamiento?) y priorizarlos para invertirlos en el trato y explotación de la información de uso mas recurrente. En pocas palabras, permite almacenar la información localmente y en Azure a la vez.<br />  </li> <li><strong>Real-time Operational Analitycs &amp; In-Memory OLTP</strong><br /> Siguiendo la misma linea, mejoran el rendimiento de la base de datos en memoria introducida en SQL Server 2014. Si ya ofrecía más velocidad respecto a la base de datos tradicional almacenada en disco, ahora prometen más integración y mayor concurrencia.<br />  </li> <li><strong>Integración con lenguage de programación R, Polybase y Mobile BI</strong><br /> Provenientes de nuevas integraciones provenientes de compras de otras empresas o tecnologías, se incluye la posibilidad de uso de R, que es un lenguaje de programación usado para análisis estadístico, y Polybase para manipular información estructurada y no estructurada. También se comenta mejoras en el uso de dispositivos móviles* </li> </ul><p><img alt="Aplicación para dispositivos móviles y bi" data-entity-type="" data-entity-uuid="" src="/files/uploads/103image/datazen.png" /></p> <p>*Tanto la integración con el lenguage R, como la explotación de dispositivos móviles parten de la adquisición Revolution Analytics y de DataZen respectivamente</p> <ul><li><strong>Soporte para JSON</strong><br /> Añaden soporte para JSON, como ya hicieron en su dia para XML, para facilitar el desarrollo de servicios web.</li> <li><strong>AlwaysOn</strong><br /> Se incluyen mejoras  en el sistema de entornos clusterizados AlwaysOn tanto a nivel de robustez como de recuperación de desastres y backups híbridos más rápidos. Se permiten réplicas síncronas múltiples y balanceado de carga secundario, para conseguir mayor disponibilidad y recuperación ante desastres.<br />  </li> <li><strong>Analysis Services</strong><br /> Aunque quizás menos visibles, también incluirán mejoras en rendimiento, usabilidad y escalabilidad tanto en SQL Server Enterprise Information Management como en Analysis Services. </li> </ul><p>En esta página de Microsoft Technet os podéis registrar para participar en la preview y poder recibir notificaciones sobre las novedades del asunto: <a href="https://www.microsoft.com/en-us/server-cloud/products/sql-server-2016/?WT.mc_id=Blog_SQL_Announce_DI">https://www.microsoft.com/en-us/server-cloud/products/sql-server-2016/?WT.mc_id=Blog_SQL_Announce_DI</a></p> <p> </p> </div> <div class="field field--name-field-it-tags field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix field__items"> <div class="field__item"><a href="/it-tags/sql-server-2016" hreflang="es">SQL Server 2016</a></div> <div class="field__item"><a href="/it-tags/sql-server" hreflang="es">SQL Server</a></div> <div class="field__item"><a href="/it-tags/administracion-sql-server" hreflang="es">Administracion Sql Server</a></div> </div> <span class="a2a_kit a2a_kit_size_32 addtoany_list" data-a2a-url="https://www.dataprix.com/blog-it/ilmasacratore/sql-server-2016-novedades" data-a2a-title="SQL Server 2016, novedades"><a class="a2a_button_x"></a><a class="a2a_button_linkedin"></a><a class="a2a_button_facebook"></a><a class="a2a_button_buffer"></a></span> <section class="field field--name-comment-node-blog field--type-comment field--label-hidden comment-wrapper"> <article role="article" data-comment-user-id="0" id="comment-5028" class="comment js-comment by-anonymous clearfix"> <span class="hidden new-indicator" data-comment-timestamp="1432572057"></span> <header> <article typeof="schema:Person" about="/en/user/anonimo" class="profile"> </article> </header> <div class="comment__content-container"> <h3 class="title"><a href="/comment/5028#comment-5028" class="permalink" rel="bookmark" hreflang="es">Muy interesante el artículo!</a></h3> <div class="comment__meta"> <p class="comment__submitted">Subido por <a rel="nofollow" href="http://www.solnetcs.com" lang="" typeof="schema:Person" property="schema:name" datatype="" content="solnet mantenimiento ordenadores" class="username">solnet manteni… (no verificado)</a> el 25 May, 2015 - 18:40</p> </div> <div class="comment__content"> <div class="clearfix text-formatted field field--name-comment-body field--type-text-long field--label-hidden field__item">Muy interesante el artículo!</div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=5028&amp;1=default&amp;2=es&amp;3=" token="ROlXRNVKFzfyqJbP8nl-rTo6E1p-EsJ-fzf_JNPbrrw"></drupal-render-placeholder> </div> </div> </article> </section> Fri, 15 May 2015 15:33:17 +0000 il_masacratore 169596 at https://www.dataprix.com ShrinkDatabase de SQL Server puede producir fragmentación y problemas de rendimiento https://www.dataprix.com/blog-it/carlos/shrinkdatabase-de-sql-server-puede-producir-fragmentacion-y-problemas-de-rendimiento <span class="field field--name-title field--type-string field--label-hidden">ShrinkDatabase de SQL Server puede producir fragmentación y problemas de rendimiento</span> <div class="field field--name-field-tecnologia field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix field__items"> <div class="field__item"><a href="/tecnologia/plataforma-de-datos" hreflang="es">Plataforma de datos</a></div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="Ver perfil del usuario." href="/user/carlos" lang="" about="/user/carlos" typeof="schema:Person" property="schema:name" datatype="" class="username">Carlos</a></span> <span class="field field--name-created field--type-created field--label-hidden">24 Noviembre, 2014 - 13:35</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>En SQL Server se puede utilizar el comando de <strong>DBCC SHRINKDATABASE</strong> para reducir el espacio ocupado por los archivos de datos y de log de una base de datos.</p> <p><img src="/files/uploads/32image/carlos/ShrinkDatabase-SQLServer.jpg" alt="ShrinkDatabase de SQL Server" /></p> <p> </p> <p>El problema que tiene SHRINKDATABASE es que, al contrario de lo que pueda parecer, si no se utiliza con cuidado, el resultado puede ser un importante incremento en la fragmentación de los índices, y también de las tablas, lo cual deriva en un empeoramiento del rendimiento de nuestra base de datos SQL Server, e incluso un aumento del espacio ocupado cuando se reconstruyan los índices afectados por la fragmentación.</p> <p> </p> <h2>Qué hace el comando DBCC ShrinkDatabase </h2> <p>El comando SHRINK libera el espacio libre que queda en los archivos de la base de datos, haciendo que en lugar de quedar reservado para el crecimiento de los datos, se 'devuelva' al sistema operativo. La reducción de espacio se produce, pero hay que pensar en el crecimiento de la base de datos. Si no se deja espacio libre contiguo al que utiliza cada tabla, los nuevos datos se crearán en diferentes ubicaciones físicas, se aumentará la fragmentación, y se complicarán los índices y las ordenaciones.</p> <p>Incluir SHRINKDATABASE entre las operaciones diarias de mantenimiento de una BD SQLServer, por ejemplo, puede provocar un importante problema de fragmentación, ya que los datos que se insertaran podrían quedar almacenados en una ubicación física diferente para cada nuevo día después la ejecución del SHRINK. </p> <p> </p> <h2>Cuando y cómo hay que utilizar Shrink en SQL Server</h2> <p>¿Pero entonces, SHRINK DATABASE sirve para algo? Claro que sirve, en determinados casos. Si en una base de datos SQL Server se eliminan o se truncan tablas, que reducen considerablemente el volumen ocupado por los datos, y no hay previsión de volver a ocupar ese espacio, puede interesar utilizarlo para ajustar mejor la relación entre espacio ocupado y espacio reservado, reduciendo así el tamaño de la base de datos, pero siempre es recomendable dejar un porcentaje de espacio libre reservado tanto para las operaciones diarias de la base de datos como para el crecimiento de los datos con la mínima fragmentación. </p> <p>En caso de utilizar el <strong>Shrink de SQLServer</strong>, para asegurar ese espacio reservado y que el crecimiento no cree problemas de fragmentación y rendimiento, es importante revisar los argumentos que admite el comando, ya que si se informa el segundo argumento con un número la reducción de espacio se realizará dejando ese número como porcentaje de espacio no utilizado que no se devolverá al sistema operativo.</p> <h3>Sintaxis del comando</h3> <pre>DBCC SHRINKDATABASE ( database_name | database_id | 0 [ , target_percent ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ) [ WITH NO_INFOMSGS ]</pre><h3>Ejemplo de utilización de Shrink </h3> <p>Por ejemplo, si acabamos de realizar operaciones de limpieza (eliminar esquemas no utilizados, tablas temporales o simplemente innecesarias) en nuestra base de datos que sabemos que han reducido el espacio ocupado por los datos en un 50%, y queremos reducir el espacio ocupado por los ficheros de la base de datos, pero dejando reservado un 15% de espacio libre para las operaciones diarias, y para el crecimiento que preveemos de la base de datos para el año actual, podríamos ejecutar este comando:</p> <pre> DBCC SHRINKDATABASE (Mi_base_de_datos, 15);</pre><p>De esta manera el espacio ocupado por los ficheros de datos y de registro de la base de datos se reduciría aproximadamente en un 35%. Si no incluyéramos el parámetro del porcentaje, reduciríamos más el espacio, pero al día siguiente las nuevas inserciones de datos ya comenzarían a necesitar ampliaciones de tamaño de los ficheros que obviamente no se encontrarían en el mismo espacio físico que los datos existentes, y aumentarían la fragmentación de los datos.</p> <h3>Recomendación para reducir la fragmentación</h3> <p>Y ya que hablamos de fragmentación, lo que sí es recomendable incluir en las tareas de mantenimiento periódicas es una reconstrucción de los índices con un REBUILD, cosa que reducirá la fragmentación y mejorará el rendimiento de la DB, aunque pueda incrementar un poco más el espacio utilizado:</p> <pre> ALTER INDEX idx_mitabla_ID ON MiTabla REBUILD; </pre><h4> </h4> <h4>Referencias</h4> <p>Finalmente, enlazo como referencia algunas entradas de blog de otros sitios que explican porqué <a href="https://www.straightpathsql.com/archives/2009/01/dont-touch-that-shrink-button/">hacer un Shrink Database normalmente no es buena idea</a>, aportan <a href="https://blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/13/629059.aspx">razones para no utilizar un ShrinkDatabase</a>, o que hacen una <a href="https://blog.sqlauthority.com/2011/01/19/sql-server-shrinking-database-is-bad-increases-fragmentation-reduces-performance/">demostración práctica de lo que pasa con el espacio y la fragmentación al hacer un ShrinkDatabase</a></p> <p> </p> <p>¿Conoces algún caso más en el que sea o no recomendable hacer un Shrink? ¿Te has encontrado en alguna ocasión un problema de fragmentación o de rendimiento provocado por una desafortunada utilización de ShrinkDatabase?</p> <p> </p> </div> <div class="field field--name-field-it-tags field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix field__items"> <div class="field__item"><a href="/it-tags/sqlserver" hreflang="es">SQLServer</a></div> <div class="field__item"><a href="/it-tags/shrink" hreflang="es">Shrink</a></div> <div class="field__item"><a href="/it-tags/rendimiento" hreflang="es">Rendimiento</a></div> <div class="field__item"><a href="/it-tags/fragmentacion" hreflang="es">fragmentacion</a></div> <div class="field__item"><a href="/it-tags/administracion-sql-server" hreflang="es">Administracion Sql Server</a></div> </div> <span class="a2a_kit a2a_kit_size_32 addtoany_list" data-a2a-url="https://www.dataprix.com/blog-it/carlos/shrinkdatabase-de-sql-server-puede-producir-fragmentacion-y-problemas-de-rendimiento" data-a2a-title="ShrinkDatabase de SQL Server puede producir fragmentación y problemas de rendimiento"><a class="a2a_button_x"></a><a class="a2a_button_linkedin"></a><a class="a2a_button_facebook"></a><a class="a2a_button_buffer"></a></span> <section class="field field--name-comment-node-blog field--type-comment field--label-hidden comment-wrapper"> </section> Mon, 24 Nov 2014 12:35:19 +0000 Carlos 144745 at https://www.dataprix.com SSAS: Como monitorizar el procesamiento de cubos en Analysis Services https://www.dataprix.com/blog-it/ilmasacratore/ssas-como-monitorizar-el-procesamiento-de-cubos-en-analysis-services <span class="field field--name-title field--type-string field--label-hidden">SSAS: Como monitorizar el procesamiento de cubos en Analysis Services</span> <div class="field field--name-field-tecnologia field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix field__items"> <div class="field__item"><a href="/tecnologia/plataforma-de-datos" hreflang="es">Plataforma de datos</a></div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="Ver perfil del usuario." href="/user/ilmasacratore" lang="" about="/user/ilmasacratore" typeof="schema:Person" property="schema:name" datatype="" class="username">il_masacratore</a></span> <span class="field field--name-created field--type-created field--label-hidden">17 Febrero, 2014 - 18:23</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Existen algunos tips que permiten mejorar el rendimiento y reducir el tiempo de procesado en nuestras bases de datos de Analysis Services. Hay unas cuantas páginas dedicadas a ello y resúmenes por ahí que marcan unas líneas a seguir (y otras que no!). En este post nombro un ejemplo y de que manera podemos medir esa posible mejora de forma objetiva basándonos en el uso de los contadores de rendimiento del sistema y de Sql Server Profiler.</p> <h3>Ejemplo de mejora: Evitar tablas de hechos con demasiados campos.</h3> <p>Imaginaros la tabla de hechos con las cabeceras de venta. Si esta tabla tiene 100 campos y solo necesitamos 10, el número de registros contenidos en cada página de 8k de datos será mucho menor que si solo se almacenaran los campos sensibles. ¿Como podemos mejorar este aspecto?</p> <ol><li>Partición vertical de la tabla en dos diferentes. Si tenemos la posibilidad estaría bien poder hacer una partición vertical y aislar esos 10 campos que necesitamos para dejar el resto en una tabla adicional. Sin tener en cuenta el tamaño de los campos, podríamos reducir el número de páginas de datos a recorrer en un 10%. Aunque esto es lo ideal, no siempre es posible.</li> <li>Tabla derivada. En la linea de lo anterior, podríamos mantener una tabla derivada sobre la que procesar los hechos.</li> <li>Crear una Vista indizada. Con la vista hacemos la partición pero restringimos de alguna manera la tabla original e incluso podríamos ralentizar un poco la inserción de datos si es una tabla transaccional muy concurrida. No es mala opción pero hay que medir las ventajas y los inconvenientes.</li> </ol><h3>Medir el procesamiento con los contadores de rendimiento de Windows Server</h3> <p><img src="/files/uploads/103image/perfmon.png" alt="" />La idea es trabajar sobre una linea base, una foto inicial de como está todo y después de cada cambio realizar otra monitorización para comparar las diferencias y poder medir bien que hemos cambiado y donde está la mejora o el empeoramiento. Al igual que con el motor de base de datos de Microsoft SQL Server, para monitorizar el procesado de cubos podemos usar el monitor de rendimiento del sistema para consultar los contadores de rendimiento propios de Analysis Services. En <a href="https://www.dataprix.com/blog-it/bases-datos/sql14-monitorizacion-sql-server-mediante-contadores-rendimiento">este otro post</a> explico como se hace para la base de datos. Para la parte de Analysis Services, algunos contadores que podemos usar los siguientes:</p> <ul><li><em><strong>MSOLAP: Processing<br /></strong></em><strong><em>Rows read/sec: </em></strong><em><br /></em>Registros que se leen por segundo en el procesado.</li> </ul><ul><li><em><strong>MSOLAP: Proc Aggregations<br /></strong></em><strong><em>Temp File Bytes Writes/sec</em>: </strong>Ratio por segundo de escrituras en los ficheros temporales. Esto ocurre cuando se excede el límite de memoria. Cuanto más tienda a cero mejor.<br /><strong><em>Rows created/Sec </em>:</strong> Ratio por segundo de creación por segundo. Cuanto más elevado mejor.<br /><strong><em>Current Partitions :</em></strong> Particiones procesadas actualmente. No sirve más que para controlar que estamos procesando y que los contadores no estén "contaminados" (por ejemplo si es mayor que 1 y no queremos procesado paralelo).<br />  </li> <li><strong><em>MSOLAP: Threads<br /></em></strong><em><strong>Processing pool idle threads : </strong></em>Puede variar según la versión, en la 2012 se separan los hilos de procesado de los de E/S. Sirve para monitorizar el paralelismo de tareas.<br /><em><strong>Processing pool job queue length : </strong></em>Puede variar según la versión, en la 2012 se separan los hilos de procesado de los de E/S. Sirve para monitorizar el paralelismo de tareas.<br /><em><strong>Processing pool busy threads :</strong></em> Puede variar según la versión, en la 2012 se separan los hilos de procesado de los de E/S. Sirve para monitorizar el paralelismo de tareas.<br />  </li> <li><em><strong>MSSQL: Memory Manager<br /></strong></em><em><strong>Total Server Memory :</strong></em> Total de memoria que está usando actualmente el motor relacional de la base de datos.<br /><em><strong>Target Server Memory :</strong></em> Total de memoria CONFIGURADO que debería usar el motor de base datos. Si el contador anterior es inferior a este hay algún problema y alguien se está comiendo memoria que teóricamente hemos asignado a la base de datos.<br />  </li> <li><em><strong>Logical Disk<br /></strong></em><em><strong>Avg. Disk sec/Transfer – All Instances <p> </p></strong></em></li> <li><strong><em>Processor:<br /></em>% Processor Time – Total :</strong> % CPU consumida actualmente.<br />  </li> <li><em><strong>System:<br /></strong></em><em><strong>Context Switches / sec :</strong></em> Cambios de tarea en la cola de la cpu. Un valor bajo que tiende a 0 puede significar que algo está monopolizando el 100% de la cpu.</li> </ul><h3>Controlar el uso del motor de base de datos relacional</h3> <p>Como complemento a lo que comento en el apartado anterior, también deberíamos analizar como van las consultas SQL que tiramos sobre la base de datos relacional. Podemos complementar lo anterior con la captura de actividad desde Sql Server Profiler. Como plantilla podemos usar la de Tunning y le añadimos estos dos eventos:</p> <ul><li><strong>Performance/Showplan XML Statistics Profile</strong></li> <li><strong>TSQL/SQL:BatchCompleted</strong></li> </ul><p>De ellos necesitamos las columnas <em>TextData, Reads, DatabaseName, SPID </em>y<em> Duration</em>. Con ellos podemos detectar cuales son las consultas que más se demoran, podemos ver su plan de ejecución y mirar los índices que pueden mejorar los tiempos en la recuperación de los datos.</p> <p>En cuanto a la captura con <strong>SQL Server Profiler</strong>, es bueno saber que podemos filtrar eventos para solo mostrar lo imprescindible.<a href="https://www.dataprix.com/blog-it/bases-datos/sql-server-profiler-como-capturar-consultas-sql-detalle-su-plan-ejecucion"> En este otro post</a> explico como funciona la captura y como filtrar para afinar la captura.</p> <p><img src="/files/uploads/103image/iniciar_profiler_plan_xml.png" alt="" /></p> <h2> En conclusión...</h2> <p>... creo que conocer la manera de monitorizar el procesado de nuestros cubos nos permite ver que podemos mejorar, ya sea algo del diseño o maneras de hacer las cosas. Como comento arriba para poder empezar deberíamos comenzar con una captura inicial y tras cada posible mejora deberíamos volver a monitorizar para cuantificar la mejora. Pienso que la mayoría de contadores pueden ser evolutivos (los comparamos con anteriores) y creo que no hay un rango definido. Simplemente sabiendo lo que miden y con un poco de lógica sabremos cuando va a mejor o a peor (el contador). El único problema que podemos tener en todo esto es que podamos hacerlo de forma proactiva, el lugar de forma reactiva cuando se nos solape con otros procesos... y entonces tengamos un problema.</p> <p> </p> <p> </p> </div> <div class="field field--name-field-it-tags field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix field__items"> <div class="field__item"><a href="/it-tags/ssas" hreflang="es">SSAS</a></div> <div class="field__item"><a href="/it-tags/monitorizar" hreflang="es">monitorizar</a></div> <div class="field__item"><a href="/it-tags/administracion-sql-server" hreflang="es">Administracion Sql Server</a></div> </div> <span class="a2a_kit a2a_kit_size_32 addtoany_list" data-a2a-url="https://www.dataprix.com/blog-it/ilmasacratore/ssas-como-monitorizar-el-procesamiento-de-cubos-en-analysis-services" data-a2a-title="SSAS: Como monitorizar el procesamiento de cubos en Analysis Services"><a class="a2a_button_x"></a><a class="a2a_button_linkedin"></a><a class="a2a_button_facebook"></a><a class="a2a_button_buffer"></a></span> <section class="field field--name-comment-node-blog field--type-comment field--label-hidden comment-wrapper"> </section> Mon, 17 Feb 2014 17:23:50 +0000 il_masacratore 95401 at https://www.dataprix.com SQL Server: Vistas indizadas y el porqué de usarlas para cargas de dwh https://www.dataprix.com/blog-it/ilmasacratore/sql-server-vistas-indizadas-y-el-porque-de-usarlas-para-cargas-de-dwh <span class="field field--name-title field--type-string field--label-hidden">SQL Server: Vistas indizadas y el porqué de usarlas para cargas de dwh </span> <div class="field field--name-field-tecnologia field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix field__items"> <div class="field__item"><a href="/tecnologia/plataforma-de-datos" hreflang="es">Plataforma de datos</a></div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="Ver perfil del usuario." href="/user/ilmasacratore" lang="" about="/user/ilmasacratore" typeof="schema:Person" property="schema:name" datatype="" class="username">il_masacratore</a></span> <span class="field field--name-created field--type-created field--label-hidden">11 Febrero, 2014 - 12:17</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p><img src="/files/uploads/103image/nueva_vista.jpg" alt="Creación de nueva vista desde la vista Diesño" />Las vistas pueden ser una herramienta perfecta para simplificar consultas que unen distintas tablas, permiten abstenerse de la estructura origen y simplificar si hace falta la estructura saliente. También nos pueden servir como un mecanismo de seguridad que limitará el acceso de los usuarios a datos no deseados de las tablas base. Con MS SQL Server, Microsoft ha ido un paso más allá y permite crear un nuevo tipo de vistas llamado vista indizada.</p> <h3>Que son las vistas indizadas?</h3> <p>Las vistas de toda la vida, las podemos ver como si fueran una tabla pero realmente no existe. Una vista estandar no está almacenada en la base de datos, en lugar de eso los datos que se devuelven se recuperan de forma dinámica en el momento de la petición (la consulta SQL sobre la vista). Una <strong>vista indizada </strong>se diferencia de una normal basicamente en que sobre la primera creamos un índice (el primero clusterizado). En el momento en que lo hacemos estamos persistiendo en la base de datos una referencia que abre la veda a posibles optimizaciones que no se pueden hacer con una vista simple. También es cierto que si nos hace falta y realmente nos aporta algo también es posible es crear más de un indice ( a partir del segundo ya no pueden ser clústerizados, crear uno clústerizado es obligado).</p> <p>Una de los beneficios que también da la <strong>vista indizada</strong> es que aporta una nueva perspectiva en el momento del cálculo para el plan de ejecución de una <em>SELECT</em> sobre las tablas que implica. El <em>optimizador de consultas</em> puede seleccionar la vista si determina que ésta puede sustituirse por parte o por toda la consulta del plan de consultas si es de un coste menor. En el segundo caso, la vista indizada se utiliza en lugar de las tablas subyacentes y sus índices. No es necesario hacer referencia a la vista en la consulta para que el optimizador de consultas la utilice durante la ejecución. Esto incluso permite que las aplicaciones existentes se beneficien de las vistas indizadas recién creadas sin cambiar directamente código en dichas aplicaciones.</p> <h3>Donde usarlas y como crearlas</h3> <p>Las <strong>vistas indizadas</strong> aportan un beneficio aunque también un coste. Puede tener el mismo “defecto” que puede producir la indexación masiva de una tabla transaccional con inserciones/modificaciones masivas. Debemos evaluar siempre el beneficio en base al coste que suponga. Realmente con las vistas indizadas (clusterizada o no) seguro que notaremos una mejora si las usamos en datawarehouses, data marts, bases de datos OLAP, en procesos de minería de datos y similares. En estos escenarios son candidatas las consultas gigantes sobre diferentes tablas, con particiones verticales u horizontales, agregaciones y sin pensarlo demasiado, las particiones de tablas de hechos. Un ejemplo que se me ocurre es el del diagrama en estrella del datamarts de ventas donde podemos tener cabeceras de venta en una tabla y el detalle en otra. Seria normal en casos como estos haber creado particiones en el grupo de medidas y hacer la separación por las fechas de venta que estan en la cabecera.</p> <p> </p> <p>Una de los requisitos para poder indizar una vista es que tenemos que crear la vista con la opción <em>WITH SCHEMABINDING</em>. Esta opción tiene su lado positivo, si el propietario de cualquiera de las tablas incluidas en la select intenta hacer un cambio en la estructura no podrá. Esto es fantástico porque nos protege de cualquier cambio a traición de las tablas.</p> <p>Pongo aquí un ejemplo básico. Creamos primero la tabla y la vista con la selección de los campos que nos interesan.</p> <pre> CREATE TABLE Articulos ( IdArticulo INT PRIMARY KEY, Descripcion VARCHAR(20), Stock INT) GO</pre><p> </p> <pre> CREATE VIEW ArticulosView WITH SCHEMABINDING AS SELECT IdArticulo, Stock FROM dbo.Articulos WHERE Stock &gt; 0 GO CREATE UNIQUE CLUSTERED INDEX idx_ArticulosView ON ArticulosView(Stock)</pre><p>Una vez hemos creado el índice, los datos de la vista están almacenados en la base de datos como cualquier otro índice clusterizado sobre una tabla. Cualquier consulta sobre la vista ya puede usar el índice para el cálculo del plan de ejecución. Consultas que tengan un predicado similar ya podran beneficiarse del indice por rango. Por ejemplo:</p> <pre> SELECT IdArticulo, Stock FROM Articulos WHERE Stock &gt; 0</pre><p>Incluso en este caso y aunque no hagamos la consulta sobre la vista, el optimizador de consultas puede tener en cuenta el indice clusterizado de la vista para obtener los datos con un mejor rendimiento que si lo hiciera con los indices de la tabla base. </p> <p>Otro ejemplo con más sentido donde se usa el indice clusterizado de la vista en lugar del de la tabla. Nos imaginamos que queremos hacer una partición vertical de una tabla con mucho campos (wide_tbl) que podría ser la tabla de cabeceras o lineas de venta de nuestro erp desde el que sacamos directamente la información que nos interesa de la parte de ventas:</p> <pre> – Creación de la tabla base CREATE TABLE wide_tbl( a int PRIMARY KEY, b int, c int, d int, e int, f int, g int, h int, i int, j int, k int, l int, m int, n int, o int, p int, q int, r int,s int,t int, u int, v int, w int, z int) GO – Vista sobre la tabla base donde hacemos partición vertical (nos quedamos solo con lo que nos interesa) CREATE VIEW v_abc WITH SCHEMABINDING AS SELECT a, b, c FROM dbo.wide_tbl WHERE a BETWEEN 0 AND 1000 GO CREATE UNIQUE CLUSTERED INDEX i_abc ON v_abc(a) GO</pre><p>La select es la siguiente. Si miramos el plan de ejecución estimado ya vemos que está usando efectivamente el índice de la vista aunque seleccionemos datos de la tabla.</p> <pre> SELECT b, count_big(*), SUM(c) FROM wide_tbl WHERE a BETWEEN 0 AND 1000 GROUP BY b</pre><p><img src="/files/uploads/103image/vista_indizada.jpg" alt="Plan de ejecución usando el índice de la vista indizada en lugar del propio de la tabla base." /></p> <h3>A tener en cuenta cuando creamos indices sobre vistas</h3> <p>Ademas de incluirse la clausula <em>WITH SCHEMABINDING</em> que nos prohibe la modificación de la estructura o eliminación de las tablas bases incluidas en la vista, debemos pensar o tener en cuenta que:</p> <ul><li>La vista <strong>debe ser determinista</strong>. Es decir, siempre debe devolver el mismo resultado para el mismo input. No se pueden incluir por ejemplo funciones como <em>GETDATE </em>que devuelven valores distintos para diferentes llamadas con el mismo argumento. </li> <li><strong>WITH SCHEMABINDING</strong>, con sus cosas buenas y sus cosas malas.</li> <li>En la definición de la vista se debe hacer referencia a nombre completo la tabla (schema.tabla). Lo mismo con las funciones de usuario.</li> <li><strong>Espacio en disco</strong>. Debemos recordar que los indices que creemos ocuparan el mismo espacio en disco que cualquier otro sobre una tabla.</li> <li>A diferencia de Oracle, donde un equivalente podría ser una vista materializada, no se necesita ningún permiso concreto para este tipo de vista. Basta con tener <strong>permisos <em>CREATE VIEW</em> y <em>ALTER</em></strong><em> </em>en el schema donde se crea la vista.</li> </ul><h2>En Conclusión...</h2> <p>... las vistas indizadas pueden ofrecer grandes mejoras de rendimiento pero siempre en los entornos adecuados. Debemos evitarlas en entornos transaccionales con mucha carga transaccional y dejarlas más para otros entornos más de consulta/actualización como puede ser las tablas sobres las que procesamos nuestros cubos del datawarehouse. También es cierto que una alternativa funcional a una vista indizada es un <em>COVER INDEX </em>que incluya las columnas que nos interesen.</p> </div> <div class="field field--name-field-it-tags field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix field__items"> <div class="field__item"><a href="/it-tags/sql-server-2014" hreflang="es">SQL Server 2014</a></div> <div class="field__item"><a href="/it-tags/sql-server-2008-r2" hreflang="es">SQL Server 2008 R2</a></div> <div class="field__item"><a href="/it-tags/sql-server-2008" hreflang="es">sql server 2008</a></div> <div class="field__item"><a href="/it-tags/dwh" hreflang="es">dwh</a></div> <div class="field__item"><a href="/it-tags/cargas" hreflang="es">cargas</a></div> <div class="field__item"><a href="/it-tags/administracion-sql-server" hreflang="es">Administracion Sql Server</a></div> </div> <span class="a2a_kit a2a_kit_size_32 addtoany_list" data-a2a-url="https://www.dataprix.com/blog-it/ilmasacratore/sql-server-vistas-indizadas-y-el-porque-de-usarlas-para-cargas-de-dwh" data-a2a-title="SQL Server: Vistas indizadas y el porqué de usarlas para cargas de dwh "><a class="a2a_button_x"></a><a class="a2a_button_linkedin"></a><a class="a2a_button_facebook"></a><a class="a2a_button_buffer"></a></span> <section class="field field--name-comment-node-blog field--type-comment field--label-hidden comment-wrapper"> <article role="article" data-comment-user-id="0" id="comment-5847" class="comment js-comment by-anonymous clearfix"> <span class="hidden new-indicator" data-comment-timestamp="1495115510"></span> <header> <article typeof="schema:Person" about="/en/user/anonimo" class="profile"> </article> </header> <div class="comment__content-container"> <h3 class="title"><a href="/comment/5847#comment-5847" class="permalink" rel="bookmark" hreflang="es">Gracias, desde Chile!</a></h3> <div class="comment__meta"> <p class="comment__submitted">Subido por <span lang="" typeof="schema:Person" property="schema:name" datatype="">Anonimo (no verificado)</span> el 18 May, 2017 - 15:51</p> </div> <div class="comment__content"> <div class="clearfix text-formatted field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>Gracias, desde Chile!</p></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=5847&amp;1=default&amp;2=es&amp;3=" token="Gn01wyGDQpfy2EQYwH0k7-PfjSXXub8-U_lej7BTQW8"></drupal-render-placeholder> </div> </div> </article> </section> Tue, 11 Feb 2014 11:17:21 +0000 il_masacratore 94161 at https://www.dataprix.com Que tiene y como instalar SQL Server Express 2012 https://www.dataprix.com/blog-it/ilmasacratore/que-tiene-y-como-instalar-sql-server-express-2012 <span class="field field--name-title field--type-string field--label-hidden">Que tiene y como instalar SQL Server Express 2012</span> <div class="field field--name-field-tecnologia field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix field__items"> <div class="field__item"><a href="/tecnologia/plataforma-de-datos" hreflang="es">Plataforma de datos</a></div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="Ver perfil del usuario." href="/user/ilmasacratore" lang="" about="/user/ilmasacratore" typeof="schema:Person" property="schema:name" datatype="" class="username">il_masacratore</a></span> <span class="field field--name-created field--type-created field--label-hidden">6 Febrero, 2014 - 09:01</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p><img alt="" data-entity-type="" data-entity-uuid="" src="/files/uploads/103image/sql_server_express_2012.png" />Para quién no lo sepa, <strong>SQL Server Express</strong> es una edición gratuita en miniatura de Sql Server. Esta versión está pensada para aplicaciones de escritorio y/o pequeñas aplicaciones web o de servidor. Esta base de datos se puede considerar la versión competidora a la versión gratuita de Oracle (Oracle XE). Ambas versiones están siempre al día y se han ido actualizando con el paso de los años y versiones. De hecho, el lanzamiento de la primera versión Express fue con la versión de SQL Server 2005.</p> <h2>Si es gratis, ¿Donde está el truco en SQL Server Express?</h2> <p>Pues que básicamente solo contamos con el motor de base de datos y poco más. Generalizando, el truco está en que este tipo de versiones, tanto la de Oracle como la de SQLServer, cuentan con cierto tipo de limitaciones, la mayoría ligadas a la capacidad de procesamiento o otras más ligadas al mundo empresarial como podría ser Analisys Services. En el caso de <strong>SQL server Express 2012</strong>, las principales limitaciones son:</p> <ul><li>El volumen máximo de la base de datos está limitado a 10Gb con la versión 2012</li> <li>Límite de 1 socket o 4 núcleos para el procesamiento de la base de datos.</li> <li>El máximo de memoria que usará la instancia será de 1gb.</li> </ul><p>A efectos prácticos, estas tres no son impeditivas y nos pueden permitir usar esta base de datos en pequeñas aplicaciones de escritorio como pueden ser puntos de venta etc. Luego existen otro tipos de limitaciones que está bien saberlas (para características compatibles, las que no tiene ni las menciono):</p> <ul><li>Puede activarse como base de datos espejo (mirroring), aunque solo como testigo.</li> <li>Puede ser suscriptora en un servicio de replicación.</li> <li>Incluye también los servicios de Búsqueda de Texto (fulltext search).</li> <li>Permite almacenamiento FILESTREAM.</li> </ul><p>A partir de la versión 2008 de SQL Server Express, se ha complementado la propia base de datos con el servicio de informes de <strong>Reporting Services</strong>. Es la versión conocida como <em>"SQL Server Express con Servicios Avanzados"</em>. Esta está muy bien. En el ejemplo anterior, el del punto de venta, podemos agilizar mucho el desarrollo e implantación de informes para la aplicación.</p> <p>Por último, con la versión 2012 podemos usar la característica <strong>LocalDb</strong>. Esta es una nueva opción que permite simplificar mucho el despliegue y que se instala de realmente rápido. Incluso permite embeber la base de datos en la aplicación que la contiene y estar funcionando en el mismo proceso de la aplicación en lugar de como servicio.</p> <h2>Cómo instalar SQLServer Express 2012</h2> <p>Para empezar nos vamos a la página del producto y<a href="https://www.microsoft.com/es-ES/download/details.aspx?id=50003"> descargamos el instalador</a>. Cuando hagamos click deberemos elegir el tipo de instalador (a elegir de entre cinco tipos distintos!):</p> <ul><li>SQL Server Express con Herramientas (con LocalDb, incluye el motor de base de datos y SQL Server Management Studio Express)</li> <li>SQL Server Management Studio (solo herramientas)</li> <li>SQL Server Express LocalDb (instalador MSI)</li> <li>SQL Server Express con Servicios Avanzados</li> <li>SQL Server Express (solo motor de base de datos).</li> </ul><p>De los anteriores, que ya vienen con su propia descripción solo destacaría el paquete MSI de <strong>SQL Server Express</strong> LocalDb para el ejemplo del punto de venta. El paquete MSI es justo lo necesario para incrustar el instalador de la parte de la base de datos en el instalador de la aplicación que la va a usar. Como he comentado antes, la otra descarga destacable es SQL SERVER Express con Servicios Avanzados que es la que lleva Reporting Services.</p> <p>El paso siguiente es lanzar el instalador par llegar al Centro de instalación de SQL Server.</p> <p><img alt="Como instalar SQL Server Express" data-entity-type="" data-entity-uuid="" src="/files/uploads/103image/instalar_sql_server_express_01.png" /></p> <p>Continuamos con un par de siguientes, siguiente para buscar actualizaciones. A continuación se copian los archivos del programa de instalación, se comprueban las reglas auxiliares y ya pasamos a elegir las características a instalar. Pulsamos siguiente y se empiezan a copiar los archivos.</p> <p><img alt="Elegir características en la instalación de SQL Server Express" data-entity-type="" data-entity-uuid="" src="/files/uploads/103image/instalar_sql_server_express_02.png" /></p> <p>Como requisitos previos, se necesita .NET Framework 3.5 Service Pack 1 y poder acceder al centro de descargas para poder actualizar con la <a href="https://www.microsoft.com/es-es/download/details.aspx?id=17718">versión 4.0</a>. Esto podemos creer que lo podemos evitar desencargando de antemano y sobretodo tenemos que tener en cuenta que necesitaremos también el paquete redristibuible para una posible instalación de localdb(la versión embebida). Pero no es el caso. La comprobación siempre se hace aun con la versión 4.0 ya instalada.</p> <p>El paso siguiente a la elección de las características es la configuración de la instancia. Debemos especificar el nombre y directorio raíz.</p> <p><img alt="Especificar nombre de instancia en la instalación de Sql Server Express" data-entity-type="" data-entity-uuid="" src="/files/uploads/103image/instalar_sql_server_express_03.png" /></p> <p>Seguimos con la configuración de las cuentas que ejecutaran los distintos servicios incluidos (el motor del sgbd, reporting services y sql server browser). Recordar que Sql Server Browser es como un "agente" que publica en la red la existencia de la instancia de SQL Server. Por defecto viene deshabilitado y si no es por causa mayor mejor dejarlo así.</p> <p><img alt="Elección de las cuentas de ejecución para los servicios en la instalación de SQL Server Express" data-entity-type="" data-entity-uuid="" src="/files/uploads/103image/instalar_sql_server_express_04.png" /></p> <p>El siguiente paso es elegir el modo de autenticación y los administradores de la base de datos. Generalmente nos conviene elegir mixto si esta base de datos se necesita usar en la red local o autenticación de windows si directamente es de uso local y no queremos complicarnos. A diferencia de una versión superior o completa del producto, como esta versión express suele acompañar a una aplicación y es de uso local, elegiremos modo de autenticación de windows y como administrador el usuario actual.</p> <p><img alt="Elección de cuentas con derechos de administración en la instalación de SQL SERVER Express" data-entity-type="" data-entity-uuid="" src="/files/uploads/103image/instalar_sql_server_express_05.png" /></p> <p>Uno de los últimos pasos será la configuración de Reporting Services. Para esta instalación simple basta con dejar la primera opción seleccionada, la que permite usarlo en modo nativo SIN integración con sharepoint services.</p> <p><img alt="Configuración de reporting services en la instalación de Sql Server Express" data-entity-type="" data-entity-uuid="" src="/files/uploads/103image/instalar_sql_server_express_06.png" /></p> <p>Un siguiente más para la privacidad y la notificación de errores a Microsoft y ya lo tenemos instalado. Esperamos una pantalla como la siguiente:</p> <p><img alt="Finalización correcta en la instalación de SQL Server Express" data-entity-type="" data-entity-uuid="" src="/files/uploads/103image/instalar_sql_server_express_07.png" /></p> <p>Finalmente reiniciamos y ya tenemos instalada la versión express de sqlserver 2012 con servicios avanzados. Si hiciera falta modificar en un futuro cualquier configuración podemos cambiar las opciones generales si vamos al Menú Inicio&gt; SQL Server 2012&gt;Herramientas de Configuración&gt;Administración de configuración de SQL SERVER. En la misma carpeta del menú inicio también podemos cambiar cualquier cosa relativa a Reporting Services si elegimos Administración de configuración de Reporting Services.</p> <h2>Resumiendo...</h2> <p>Microsoft SQL Server express es una buena opción como base de datos embebida, más sencilla que su versión de Oracle equivalente y con más posibilidades en cuanto a uso. En contraposción, no hay quien gane en simplicidad a Mysql. En global SQL Server Express es una muy buena opción para desarrollos .net y pequeñas bases de datos que incluso puedan necesitar algún informe. Desde que le acompaña Reporting Services la hace más atractiva.</p> <p> </p> </div> <div class="field field--name-field-it-tags field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix field__items"> <div class="field__item"><a href="/it-tags/sql-server-2012" hreflang="es">SQL Server 2012</a></div> <div class="field__item"><a href="/it-tags/sql-server" hreflang="es">SQL Server</a></div> <div class="field__item"><a href="/it-tags/administracion-sql-server" hreflang="es">Administracion Sql Server</a></div> </div> <span class="a2a_kit a2a_kit_size_32 addtoany_list" data-a2a-url="https://www.dataprix.com/blog-it/ilmasacratore/que-tiene-y-como-instalar-sql-server-express-2012" data-a2a-title="Que tiene y como instalar SQL Server Express 2012"><a class="a2a_button_x"></a><a class="a2a_button_linkedin"></a><a class="a2a_button_facebook"></a><a class="a2a_button_buffer"></a></span> <section class="field field--name-comment-node-blog field--type-comment field--label-hidden comment-wrapper"> <article role="article" data-comment-user-id="0" id="comment-5680" class="comment js-comment by-anonymous clearfix"> <span class="hidden new-indicator" data-comment-timestamp="1475103132"></span> <header> <article typeof="schema:Person" about="/en/user/anonimo" class="profile"> </article> </header> <div class="comment__content-container"> <h3 class="title"><a href="/comment/5680#comment-5680" class="permalink" rel="bookmark" hreflang="es">Como se agrega Analisis</a></h3> <div class="comment__meta"> <p class="comment__submitted">Subido por <span lang="" typeof="schema:Person" property="schema:name" datatype="">Assiel (no verificado)</span> el 29 Septiembre, 2016 - 00:52</p> </div> <div class="comment__content"> <div class="clearfix text-formatted field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>Como se agrega Analisis services despues de Instalar la version Express</p></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=5680&amp;1=default&amp;2=es&amp;3=" token="0Clu_3vpViAL_4qQ7KpdnnBBfiCdZV-KeiB0iffLZBc"></drupal-render-placeholder> </div> </div> </article> <div class="indented"> <article role="article" data-comment-user-id="2" id="comment-5681" class="comment js-comment clearfix"> <span class="hidden new-indicator" data-comment-timestamp="1475158260"></span> <header> <article typeof="schema:Person" about="/user/carlos" class="profile"> <div class="field field--name-user-picture field--type-image field--label-hidden field__item"> <a href="/user/carlos" hreflang="es"><img src="/files/styles/thumbnail/public/pictures/carlos.jpg?itok=p4v61j49" width="85" height="85" alt="Profile picture for user Carlos" typeof="foaf:Image" class="image-style-thumbnail" /> </a> </div> </article> </header> <div class="comment__content-container"> <h3 class="title"><a href="/comment/5681#comment-5681" class="permalink" rel="bookmark" hreflang="es">Con la versión Express puedes</a></h3> <div class="comment__meta"> <p class="comment__submitted">Subido por <a title="Ver perfil del usuario." href="/user/carlos" lang="" about="/user/carlos" typeof="schema:Person" property="schema:name" datatype="" class="username">Carlos</a> el 29 Septiembre, 2016 - 16:11</p> <p class="visually-hidden">En respuesta a <a href="/comment/5680#comment-5680" class="permalink" rel="bookmark" hreflang="es">Como se agrega Analisis</a> por <span lang="" typeof="schema:Person" property="schema:name" datatype="">Assiel (no verificado)</span></p> </div> <div class="comment__content"> <div class="clearfix text-formatted field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>Con la versión Express puedes agregar y utilizar SQL Express Advanced Services, que te permite utilizar Reporting Services, pero con la versión Express no puedes instalar Analysis Services, es decir, que no hay un Analysis Services Express. Lo de 'Advanced' es fácil que se confunda con 'Analysis', pero no es lo mismo.</p> <p>Lo que sí puede hacer un SQL Server Express es conectar con un Integration Services o un Analysis Services que tengas licenciado e instalado en otro servidor.</p> <p>En <a href="https://blogs.msdn.microsoft.com/mvpawardprogram/2014/03/10/adding-sql-server-express-2012-advanced-services-to-existing-development-environment/">este sitio</a> lo explican bastante bien.</p> <p> </p> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=5681&amp;1=default&amp;2=es&amp;3=" token="acq6P1Aj54oJiVHFmoAPGfwWRU-TBlt2_Xs-_DqMhfY"></drupal-render-placeholder> </div> </div> </article> </div> <article role="article" data-comment-user-id="0" id="comment-5713" class="comment js-comment by-anonymous clearfix"> <span class="hidden new-indicator" data-comment-timestamp="1478545106"></span> <header> <article typeof="schema:Person" about="/en/user/anonimo" class="profile"> </article> </header> <div class="comment__content-container"> <h3 class="title"><a href="/comment/5713#comment-5713" class="permalink" rel="bookmark" hreflang="es">cuando subo la base de datos</a></h3> <div class="comment__meta"> <p class="comment__submitted">Subido por <span lang="" typeof="schema:Person" property="schema:name" datatype="">Anonimo (no verificado)</span> el 7 Noviembre, 2016 - 19:58</p> </div> <div class="comment__content"> <div class="clearfix text-formatted field field--name-comment-body field--type-text-long field--label-hidden field__item">cuando subo la base de datos pierde el control del mouse, como hacer para que el mouse siempre este disponible para utilizar el management?.</div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=5713&amp;1=default&amp;2=es&amp;3=" token="RuHgstmsC008JO93pOBAND1EDrKAes6y9OGpX9IM050"></drupal-render-placeholder> </div> </div> </article> </section> Thu, 06 Feb 2014 08:01:41 +0000 il_masacratore 93215 at https://www.dataprix.com SQL Server Profiler: Cómo capturar consultas SQL y el detalle de su plan de ejecución https://www.dataprix.com/blog-it/ilmasacratore/sql-server-profiler-como-capturar-consultas-sql-y-el-detalle-de-su-plan-de <span class="field field--name-title field--type-string field--label-hidden">SQL Server Profiler: Cómo capturar consultas SQL y el detalle de su plan de ejecución</span> <div class="field field--name-field-tecnologia field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix field__items"> <div class="field__item"><a href="/tecnologia/plataforma-de-datos" hreflang="es">Plataforma de datos</a></div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="Ver perfil del usuario." href="/user/ilmasacratore" lang="" about="/user/ilmasacratore" typeof="schema:Person" property="schema:name" datatype="" class="username">il_masacratore</a></span> <span class="field field--name-created field--type-created field--label-hidden">23 Enero, 2014 - 18:49</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p><img alt="" src="/files/uploads/103image/icono_profiler.jpg" />Casi siempre nos enteramos de que alguna query va lenta por alguna queja de usuario. Ahora se queja que hace tiempo aquella cosa que hacía tardaba tanto y hoy cuando lo ha hecho un par de veces la cosa ha sido más lenta de normal. Realmente puede estar pasando de todo, pero entre las causas comunes podemos encontrarnos de todo un poco: fragmentación en la misma tabla, estadísticas que no están al dia, carga fuera de lo habitual en el servidor en ese mismo momento, incremento del volumen en las tablas implicadas, cambios en la aplicación...</p> <p>Focalizándonos solo en problemas relacionados exclusivamente con la base de datos y si el origen de la queja nos lleva a un informe, nuestro trabajo será mas fácil. Siempre partimos de una query concreta que seguramente podemos extraer rápidamente y lanzarla nosotros desde <em>Management Studio</em> para reproducir el caso.</p> <p>Si gozamos de los permisos suficientes, en el propio <em>Management Studio</em> podemos ver el plan de ejecución estimado e incluso el real desde <em>Management Studio </em>de forma interactiva. También podemos hacer lo mismo con otras herramientas complementarias como <strong><a href="https://www.dataprix.com/blog-it/bases-datos/sqlserver-sql-sentry-plan-explorer-herramienta-complementaria-management-studio">SQLSentry Plan Explorer</a></strong>. Hasta aquí todo bien.</p> <p>En cambio, si el problema de lentitud lo tenemos en una operativa de una aplicación como puede ser el ERP empresarial. Si no tenemos algún desarrollador o técnico a mano que nos pueda ayudar a extraer la consulta o alguna opción que nos permita hacer un seguimiento sobre el SQL que lanza, acabaremos usando <strong>Microsoft SQL Server Profiler</strong> para capturar esa actividad e investigar el problema.</p> <p> </p> <h2>SQL Server Profiler</h2> <p>Para el que no lo conozca o no lo sepa, SQL Server Profiler es "una interfaz enriquecida para crear y administrar seguimientos y analizar y reproducir resultados de seguimiento.". Vamos, que sirve para registrar la actividad sobre la base de datos e incluso si fuera necesario recrearla en otro entorno o condiciones.</p> <p>Para poder ejecutar SQL Server Profiler debemos tener permiso <em>ALTER TRACE</em> sobre el servidor. Para ver planes de ejecución podemos necesitar también el permiso <em>SHOWPLAN</em>.</p> <p>En nuestro caso, lo que queremos hacer es capturar el plan de ejecución para obtener el plan que nos proporciona realmente la base de datos y poder dar fe de ello. En algún caso me he encontrado que la misma consulta lanzada por una aplicación y Management Studio no estaban usando el mismo plan. La única manera de detectar el problema y dar fe de ello ha sido capturar la información real.</p> <p>Al tema. Para ejecutar el seguimiento iniciaremos SQL Server Profiler. Podemos hacerlo desde el menú inicio&gt;Programas o lanzarlo desde <em>Management Studio</em> si lo tenemos abierto. <em>Herramientas &gt; SQL Server Profiler</em>. Una vez lo iniciamos lo primero es conectarse al servidor de base de datos implicado.</p> <p><img alt="SQL Server Profiler" src="/files/uploads/103image/iniciar_profiler.jpg" /></p> <p>El siguiente paso consiste en configurar lo que será nuestro seguimiento eligiendo qué y como queremos capturar. Debemos seleccionar primero los tipos de evento queremos capturar y luego que detalles incluir sobre ellos. Para hacer correctamente la selección, primero debemos elegir una de las plantillas ya predefinidas que nos facilitan parte del trabajo y luego cambiarlas añadiendo y quitando eventos y/o columnas si hace falta a nuestro gusto.</p> <p>Nosotros elegiremos por ejemplo la plantilla "<em>Tunning</em>" que contendrá la información mínima que podemos necesitar. A continuación hacemos clic en Mostrar Todos los eventos" y luego en "Mostrar todas las columnas". Buscaremos en la columna Events <em>PERFORMANCE</em>, lo desplegamos y activamos <strong>ShowPlan Text</strong> y/o <strong>ShowPlan Xml</strong>.</p> <p>Elegimos la plantilla:</p> <p><img alt="SQL Server Profiler" src="/files/uploads/103image/iniciar_profiler_seleccionar_plantilla.jpg" /></p> <p>Añadimos lo que nos falte relativo al plan de ejecución:</p> <p><img alt="Stored procedures en SQL Server Profiler" src="/files/uploads/103image/iniciar_profiler_edicion_plantilla.jpg" /></p> <p> </p> <p>Una vez hecho esto ya podemos iniciar la captura. Le damos al Play de la barra de botones que está debajo del menú y ya empezamos a registrar. Muestro un ejemplo de como nos queda todo con lo que hemos hecho hasta ahora, de un evento <strong>Showplan XML</strong>. La imagen infeiror nos muestra un ejemplo:</p> <p><img alt="Inicio Plan de SQL Profiler" src="/files/uploads/103image/iniciar_profiler_plan_xml.png" /></p> <p> </p> <p>De las columnas que pueden aparecer para los diferentes tipos de evento, las básicas para un seguimiento pueden ser:</p> <ul><li>EventClass: nos da el tipo de evento del registro seleccionado</li> <li>TextData: Texto plano. Por ejemplo la SQL ejecutada.</li> <li>Duration: Duración en mili segundos para Eventos del tipoo RPC o Stmt Completed.</li> <li>SPID: Identificador para la sesión de base de datos que provoca el evento.</li> <li>DatabaseName: Base de datos sobre la que ocurre el evento.</li> <li>TimeStart: La fecha/hora para ubicar el evento.</li> </ul><p>Una vez visto esto ya estamos listos para cualquier incidencia... </p> <h2>Otras cosillas a comentar sobre SQL Server Profiler:</h2> <ul><li> <p>Podemos ejecutar más de un seguimiento y les podemos poner nombre cambiando el <em>Título</em>, en las propiedades del seguimiento.</p> </li> <li> <p>Cada dato innecesario suma. Si nos podemos ahorrar alguna columna mejor sacarla porque en un seguimiento de horas podemos tener cientos de miles de registros. Esto se traduce en espacio consumido innecesariamente.</p> </li> <li> <p>Si hacemos el seguimiento en un entorno de producción donde conviven otras aplicaciones debemos aislar la información que nos puede dar Profiler añadiendo filtros. Para poder hacerlo, con el seguimiento detenido, debemos ir a la pestaña Selección de Eventos y hacer clic en Filtros de Columna. En este caso podemos intentar filtrar por aplicación si somos sus únicos usuarios o si sabemos alguna tabla implicada también podemos filtrar por el campo TextData. Existen diferentes combinaciones y se trata de encontrar la combinación de filtros más selectiva.</p> <p> <img alt="Edicion de filtro con SQL Profiler" src="/files/uploads/103image/iniciar_profiler_edicion_filtro.jpg" /><br />  </p></li> <li> <p>Para ir aprendiendo más sobre los eventos, si pasamos el ratón sobre su nombre en la columna Events, en el groupbox de la parte inferior aparece una breve descrición del mismo.</p> </li> <li> <p>Si nos olvidamos el Profiler encendido y registrando actividad en el servidor, se pausa de forma "prudencial" cuando se coma todo el espacio en disco.</p> </li> <li> <p>Podemos guardar la información de un seguimiento. Podemos hacerlo a fichero o podemos hacerlo en una tabla. Puede ser recomendable hacerlo en ambos pero para tratar los resultados puede ser más fácil la tabla.</p> </li> <li> <p>Podemos crear plantillas a nuestro gusto. cuando ya tenemos la plantilla en ejecución podemos hacerlo desde el menú <em>Archivo&gt;Guardar como&gt;Plantilla de seguimiento</em>.</p> <p> </p> </li> </ul></div> <div class="field field--name-field-it-tags field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix field__items"> <div class="field__item"><a href="/it-tags/sql-server-2014" hreflang="es">SQL Server 2014</a></div> <div class="field__item"><a href="/it-tags/sql-server-2012" hreflang="es">SQL Server 2012</a></div> <div class="field__item"><a href="/it-tags/sql-server-2008-r2" hreflang="es">SQL Server 2008 R2</a></div> <div class="field__item"><a href="/it-tags/sql-server-2008" hreflang="es">sql server 2008</a></div> <div class="field__item"><a href="/it-tags/sql-server" hreflang="es">SQL Server</a></div> <div class="field__item"><a href="/it-tags/rendimiento" hreflang="es">Rendimiento</a></div> <div class="field__item"><a href="/it-tags/administracion-sql-server" hreflang="es">Administracion Sql Server</a></div> </div> <span class="a2a_kit a2a_kit_size_32 addtoany_list" data-a2a-url="https://www.dataprix.com/blog-it/ilmasacratore/sql-server-profiler-como-capturar-consultas-sql-y-el-detalle-de-su-plan-de" data-a2a-title="SQL Server Profiler: Cómo capturar consultas SQL y el detalle de su plan de ejecución"><a class="a2a_button_x"></a><a class="a2a_button_linkedin"></a><a class="a2a_button_facebook"></a><a class="a2a_button_buffer"></a></span> <section class="field field--name-comment-node-blog field--type-comment field--label-hidden comment-wrapper"> <article role="article" data-comment-user-id="0" id="comment-5080" class="comment js-comment by-anonymous clearfix"> <span class="hidden new-indicator" data-comment-timestamp="1438897522"></span> <header> <article typeof="schema:Person" about="/en/user/anonimo" class="profile"> </article> </header> <div class="comment__content-container"> <h3 class="title"><a href="/comment/5080#comment-5080" class="permalink" rel="bookmark" hreflang="es">Que excelente articulo, me</a></h3> <div class="comment__meta"> <p class="comment__submitted">Subido por <span lang="" typeof="schema:Person" property="schema:name" datatype="">Victor Blanco (no verificado)</span> el 6 Agosto, 2015 - 23:45</p> </div> <div class="comment__content"> <div class="clearfix text-formatted field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>Que excelente articulo, me encanto, me gustaria aprender mas para sacarle el jugo a la herramienta, si me recomendas algo de lectura te agradeceria, saludos.</p></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=5080&amp;1=default&amp;2=es&amp;3=" token="DcO1EOyy24Qakmv_GYloSSicP5AGnsOFtUiw3nYl8P8"></drupal-render-placeholder> </div> </div> </article> </section> Thu, 23 Jan 2014 17:49:36 +0000 il_masacratore 90468 at https://www.dataprix.com SQL Sentry Plan Explorer de SQL Server 2014, herramienta complementaria a Management Studio https://www.dataprix.com/blog-it/ilmasacratore/sql-sentry-plan-explorer-de-sql-server-2014-herramienta-complementaria <span class="field field--name-title field--type-string field--label-hidden">SQL Sentry Plan Explorer de SQL Server 2014, herramienta complementaria a Management Studio</span> <div class="field field--name-field-tecnologia field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix field__items"> <div class="field__item"><a href="/tecnologia/plataforma-de-datos" hreflang="es">Plataforma de datos</a></div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="Ver perfil del usuario." href="/user/ilmasacratore" lang="" about="/user/ilmasacratore" typeof="schema:Person" property="schema:name" datatype="" class="username">il_masacratore</a></span> <span class="field field--name-created field--type-created field--label-hidden">16 Enero, 2014 - 13:22</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>SentryOne dispone de diferentes aplicaciones para ayudarnos en la administración y el día a día con nuestra base de datos SQL Server, dwh o como desarrolladores. <strong>SentryOne Plan Explorer </strong>permite hacer un análisis más gráfico de una consulta que lanzamos sobre SQL Server y deforma interactiva profundizar en diferentes aspectos relacionados como coste de operaciones, peso sobre el lote, índices involucrados...</p> <p><strong>Plan Explorer</strong> tiene versión <em>free </em>y versión <em>PRO</em>. La versión <em>free</em> podemos <a href="https://www.sentryone.com/plan-explorer">descargarla directamente de SentryOne</a> donde tenemos el instalador de la aplicación y adicionalmente un addon para <em>SQL Server Management Studio</em>. La instalación no tiene misterio y es del estilo siguiente siguiente.</p> <p>A primera vista, como otras herramientas parecidas, muestra lo que nos da el propio<em> Management Studio </em>cuando vemos el plan de ejecución estimado/real de una consulta. Lo que es distinto es que de forma predeterminada ya focaliza nuestra atención a las áreas problemáticas que van con nuestra consulta. Por ejemplo, en la pestaña de <em>Plan Diagram</em>, ya nos marca las operaciones más costosas mediante colores. Otro ejemplo es la pestaña<em> Plan Tree</em> que muestra los datos más concretos donde también nos marca de otro color si existe una gran diferencia entre las filas estimadas con las filas reales (estadísticas desactualizadas!).</p> <p>La forma de empezar a trabajar es bastante sencilla. Basta con hacer un <em>Copy &amp; Paste</em> de la consulta en la pestaña que vemos por defecto en la pantalla inicial, <em>Command Text</em>. A continuación ya podemos pulsar ver el Plan Estimado o el Real, como en <em>Management Studio</em>. Es en ese momento cuando nos pide a que servidor y base de datos conectarse.</p> <p><img alt="" data-entity-type="" data-entity-uuid="" src="/files/uploads/103image/planexplorer_commandtext.jpg" /><img alt="" data-entity-type="" data-entity-uuid="" src="/files/uploads/103image/planexplorer_connect.jpg" /></p> <p>Una vez conectados y obtenido el plan estimado de ejecución ya vemos en la parte inferior su diagrama. En el ya nos marca en % relativos al coste total las operaciones y en colores remarcadas las más costosas. A diferencia de Management Studio, si falta un indice nos aparece el símbolo warning en el <em>SELECT</em> en lugar de la parrafada en el encabezado de la pestaña.</p> <p><img alt="" data-entity-type="" data-entity-uuid="" src="/files/uploads/103image/planexplorer_missing_index.jpg" /></p> <p>Los porcentajes que vemos, por defecto corresponde a la suma de <em>I/O+CPU</em>, pero también podemos elegir solo por<em> I/O</em> o <em>CPU</em> según nos convenga. También podemos hacer que varíe el grueso de las lineas de datos según su volumen (todo esto en el menú contextual del área del gráfico).</p> <p><img alt="" data-entity-type="" data-entity-uuid="" src="/files/uploads/103image/planexplorer_planexplorer.jpg" /></p> <p>En la segunda pestaña del panel inferior, <strong><em>Plan Tree</em></strong>, vemos jerarquizadas las operaciones con los datos más relevantes por defecto (Coste estimado, Coste del subarbol, filas estimadas que pasan, etc...). Podemos añadirle según nuestras necesidades o gustos mas columnas.</p> <p><img alt="" data-entity-type="" data-entity-uuid="" src="/files/uploads/103image/planexplorer_plantree.jpg" /></p> <p>En la tercera pestaña, <em><strong>Top Operations</strong></em>, podemos comparar directamente mediante una tabla costes de cpu y de I/O las diferentes operaciones dentro de la consulta. Como en la pestaña anterior, podemos añadir más columnas según nuestros gustos.</p> <p><img alt="" data-entity-type="" data-entity-uuid="" src="/files/uploads/103image/planexplorer_topoperations.jpg" /></p> <p>En la cuarta,<strong><em> Query Columns</em></strong>, vemos los índices que se usan en la consulta y que filtros aplican. También vemos el tipo de operación (Index Seek, Clustered Index Seek, Index Scan...). En la versión PRO de Plan Explorer desde aquí podemos ver las estadísticas de estos índices e incluso crear uno nuevo.</p> <p><img alt="" data-entity-type="" data-entity-uuid="" src="/files/uploads/103image/planexplorer_query_columns.jpg" /></p> <p>La quinta pestaña, <em><strong>Join Diagram</strong></em>, muestra de manera directa y muy simplificada las tablas involucradas solo con los campos que usamos en la relación entre ellas.</p> <p><img alt="" data-entity-type="" data-entity-uuid="" src="/files/uploads/103image/planexplorer_joindiagram.jpg" /></p> <p><em><strong>Parameters </strong></em>muestra los parámetros incluidos en la consulta, incluso los no declarados explícitamente. La pestaña <em><strong>Expressions </strong></em>muestra datos adicionales por cada expresión de agregado: SUM, MIN etc... Realmente no aporta demasiado pero tampoco molesta. Por último, la pestaña <em><strong>Table I/O </strong></em>muestra los datos relativos a entrada y salida de datos: cantidad de scans, lecturas físicas, lógicas.</p> <p>Una de las diferencias entre trabajar con el plan estimado (<em>Get Estimated PLan)</em> y el real (<em>Get Actual Plan)</em> es que además de las estadísticas de I/O que se muestran en la pestaña <em>Table I/O</em>, también se comparan las filas estimadas con las reales, algo que puede indicar que las estadísticas están desactualizadas.</p> <p>Otra de las opciones, como mínimo curiosas, es la opción de menú <em><strong>Anonymize</strong></em>. Esta lo que hace es abrir una nueva ventana donde nos ha reemplazado los nombres de nuestras bases de datos, los índices, nombres de usuario, alias, parámetros... con toda la info relativa a la query. La gracia es poder compartir esta información y pedir consejo si hiciera falta.</p> <p>El <strong>addon de SentryOne Plan Explorar</strong> para <em>SQL Server Management Studio</em> es un simple vínculo que permite desde la visualización de cualquier plan de ejecución desde el menú contextual, haciendo clic derecho en el área <em>"View with SQL Sentry Plan Explorer"</em>. Para instalarlo basta con descargarlo de aquí y reiniciar Management Studio para que podamos usarlo. Es un requisito haber instalado antes la propia aplicación Plan Explorer. El addon de momento funciona con Management Studio incluido en SQL Server 2005, SQL Server 2008, SQL Server 2008 R2 y SQL Server 2012.</p> <p> </p> <h2>En resumen...</h2> <p>... Me parece una herramienta útil pero no esencial. Ofrece alguna cosa más que el propio <em>Management Studio</em> y lo hace más bonito pero podemos vivir sin ella. Uno de los motivos por los quizás que me parece recomendable es para alguien que anda perdido y no sabe por donde empezar.</p> <p>No es lo mismo enfrentarte con la ventana del plan de SSMS que con los colores y pestañas de <em>SQLSentry Plan Explorer</em>. Para el resto, mi conclusión es que lo que más aporta es facilidad de acceso a todos los aspectos relacionados con la query.</p> <p> </p> <p> </p> </div> <div class="field field--name-field-it-tags field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix field__items"> <div class="field__item"><a href="/it-tags/administracion-sql-server" hreflang="es">Administracion Sql Server</a></div> <div class="field__item"><a href="/it-tags/base-de-datos" hreflang="es">base de datos</a></div> <div class="field__item"><a href="/it-tags/herramientas" hreflang="es">herramientas</a></div> <div class="field__item"><a href="/it-tags/sql" hreflang="es">SQL</a></div> <div class="field__item"><a href="/it-tags/sql-server-2008" hreflang="es">sql server 2008</a></div> <div class="field__item"><a href="/it-tags/sql-server-2012" hreflang="es">SQL Server 2012</a></div> <div class="field__item"><a href="/it-tags/sql-server-2014" hreflang="es">SQL Server 2014</a></div> </div> <span class="a2a_kit a2a_kit_size_32 addtoany_list" data-a2a-url="https://www.dataprix.com/blog-it/ilmasacratore/sql-sentry-plan-explorer-de-sql-server-2014-herramienta-complementaria" data-a2a-title="SQL Sentry Plan Explorer de SQL Server 2014, herramienta complementaria a Management Studio"><a class="a2a_button_x"></a><a class="a2a_button_linkedin"></a><a class="a2a_button_facebook"></a><a class="a2a_button_buffer"></a></span> <section class="field field--name-comment-node-blog field--type-comment field--label-hidden comment-wrapper"> </section> Thu, 16 Jan 2014 12:22:29 +0000 il_masacratore 88814 at https://www.dataprix.com ApexSQL Refactor: Complemento para edición de código en MS SQL Server Management Studio https://www.dataprix.com/blog-it/ilmasacratore/apexsql-refactor-complemento-para-edicion-de-codigo-en-ms-sql-server <span class="field field--name-title field--type-string field--label-hidden">ApexSQL Refactor: Complemento para edición de código en MS SQL Server Management Studio</span> <div class="field field--name-field-tecnologia field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix field__items"> <div class="field__item"><a href="/tecnologia/plataforma-de-datos" hreflang="es">Plataforma de datos</a></div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="Ver perfil del usuario." href="/user/ilmasacratore" lang="" about="/user/ilmasacratore" typeof="schema:Person" property="schema:name" datatype="" class="username">il_masacratore</a></span> <span class="field field--name-created field--type-created field--label-hidden">10 Diciembre, 2013 - 10:30</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p><strong>ApexSQL Refactor</strong><span> es una herramienta potente de formateo de código sql para usuarios que trabajan a diario con él. Es un complemento para </span><strong>SQL Server Management Studio</strong><span> que puede ayudarte a generar, reutilizar el código o formatearlo (tabulaciones, mayúsculas, minúsculas, nomenclatura, palabras reservadas...) para hacerlo más legible para otros o incluso parsear el de otros para presentarlo a tu gusto.</span></p> <p><span>Este refactor, es un complemento gratuito, aunque existe una versión más completa de pago y se puede descargar directamente de la página del fabricante. La pega, como suele ser habitual en estos casos es que requiere registrarse para poder bajarte el instalador.</span></p> <h2><strong>Instalación de ApexSQL Refactor</strong></h2> <p>Descargamos el complemento, una vez registrados y lanzamos el setup. Como se ve en la imagen,  permite usarlo con diferentes versiones "actuales" de <strong>Visual Studio</strong> y <strong>MS</strong>.</p> <p><img src="/files/uploads/103image/apex_sql_setup_1.jpg" alt="Instalación de ApexSQL Refactor" /></p> <p>Una vez finalizado el instalador confirmaremos que todo ha ido bien cuando abramos Management Studio y nos aparezca el nuevo menú:</p> <p><img src="/files/uploads/103image/apex_sql_01.jpg" alt="ApexSQL Refactor en SQL Server Managent Studio" /></p> <h2>Formateando el código</h2> <p>Lo ideal para empezar a usarlo es ponernos a editar las opciones para el formateador del código. Para ello nos vamos a ApexSQL &gt; Apex SQLRefactor &gt; Format SQL Code &gt; Formatting Options. En este formulario podemos editar diferentes perfiles de formateo. Nosotros deberíamos crear uno nuevo e ir jugando con las diferentes opciones. Encontrareis una guía-resumen muy clara en <a href="https://www.apexsql.com/datasheets/Formatting%20screen%20mockups%20and%20examples.pdf" rel="nofollow">este enlace</a>.</p> <p><img src="/files/uploads/103image/apex_sql_formatting_options.jpg" alt="Opciones de formateo de Apex SQL Refactor" /></p> <p>Como guinda, para facilitar el uso y formateo de código que hemos editado, primero deberíamos establecerlo como predeterminado desde el formulario de Formatting Options, marcando la casilla Use as default. Por último, fijarnos en el atajo de teclado (Ctrl+May+Alt+F) o cambiarlo desde el menú <em>ApexSQL&gt;ApexSQL Refactor&gt;Options</em>.</p> <p> </p> <h2>Refactorizando</h2> <p>Además de la parte anterior, con este complemento tenemos la opción de automatizar la generación de partes de código. Si nos paramos a mirar, desde el mismo menú ya podemos ver algunas de las opciones que lanzan asistentes para "hacer la magia":</p> <ul><li> <p>Copiar al portapapeles como otro lenguaje: Por ejemplo, en el caso de una select la copia entre comillas y nos la asigna a una variable de tipo cadena del lenguaje seleccionado con su declaración. El ejemplo select * from sys.databases lo transforma a c# así: string sql = "select * from sys.databases;"; </p> </li> <li> <p>Encapsular como: Envolver la consulta para regalo en forma de vista, procedimiento, función o función escalar. Si lo elegimos se lanza un asistente donde nos permite elegir nombre, parámetros y nos muestra el script que generará.</p> </li> </ul><p> </p> <p><img src="/files/uploads/103image/apex_sql_encapsulate(1).jpg" alt="Encapsular un stored procedure con ApexSQL Refactor" /></p> <p> </p> <p> </p> <h2><strong>En resumen...</strong></h2> <p>… és útil y además gratis, aunque seguro que existen otras herramientas que hacen lo mismo. Por cierto, una manera más rápida de formatear una SELECT dentro de Management Studio es seleccionarla entera (sola) y pulsar Ctrl+Shift+Q para que se abra el Diseñador de consultas. Pulsamos aceptar y ya está toda espaciada y tabulada de forma simple.</p> <p>   </p> <p> </p></div> <div class="field field--name-field-it-tags field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix field__items"> <div class="field__item"><a href="/it-tags/sql-server" hreflang="es">SQL Server</a></div> <div class="field__item"><a href="/it-tags/sql" hreflang="es">SQL</a></div> <div class="field__item"><a href="/it-tags/herramientas" hreflang="es">herramientas</a></div> <div class="field__item"><a href="/it-tags/administracion-sql-server" hreflang="es">Administracion Sql Server</a></div> </div> <span class="a2a_kit a2a_kit_size_32 addtoany_list" data-a2a-url="https://www.dataprix.com/blog-it/ilmasacratore/apexsql-refactor-complemento-para-edicion-de-codigo-en-ms-sql-server" data-a2a-title="ApexSQL Refactor: Complemento para edición de código en MS SQL Server Management Studio"><a class="a2a_button_x"></a><a class="a2a_button_linkedin"></a><a class="a2a_button_facebook"></a><a class="a2a_button_buffer"></a></span> <section class="field field--name-comment-node-blog field--type-comment field--label-hidden comment-wrapper"> </section> Tue, 10 Dec 2013 09:30:11 +0000 il_masacratore 79718 at https://www.dataprix.com SQL Server 2014 DQS (Data Quality Services) https://www.dataprix.com/blog-it/ilmasacratore/sql-server-2014-dqs-data-quality-services <span class="field field--name-title field--type-string field--label-hidden">SQL Server 2014 DQS (Data Quality Services)</span> <div class="field field--name-field-tecnologia field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix field__items"> <div class="field__item"><a href="/tecnologia/plataforma-de-datos" hreflang="es">Plataforma de datos</a></div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="Ver perfil del usuario." href="/user/ilmasacratore" lang="" about="/user/ilmasacratore" typeof="schema:Person" property="schema:name" datatype="" class="username">il_masacratore</a></span> <span class="field field--name-created field--type-created field--label-hidden">21 Noviembre, 2013 - 12:53</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p><strong>Microsoft Sql Server Data Quality Services</strong> (DQS) es una herramienta, cliente-servidor, que se introdujo en Sql Server 2012 y que permite permite velar por la integridad de los datos basada en unos datos previos, la base de datos de conocimiento, que usamos para validar otros datos posteriores. Esta herramienta permite incluso limpiar datos entrantes en paquetes de SSIS. Su propósito es conseguir datos de calidad, construyendo primero una fuente de conocimiento sobre la calidad objetivo de nuestros datos, creando <em>dominios </em>(valores de referencia para asignar validez o no) y reglas para definir actuaciones.</p> <p><img src="/files/uploads/103image/dqs_arch_msdn.gif" alt="Microsoft SQL Server Data Quality Services" /></p> <p>Generalmente los datos incorrectos son un problema que se genera por usuarios o clientes en el momento de su introducción. Otras veces, los problemas pueden venir al unir diferentes orígenes de datos en un mismo almacén de datos destino. Con herramientas como <strong>DQS </strong>podemos, de alguna manera, validar nuestros datos o incluso corregirlos para obtener finalmente datos válidos y de mayor valor empresarial. En teoría, una de las ventajas que dice Microsoft sobre <strong>DQS </strong>es que permite a usuarios de distintos niveles (usuario final o profesional IT) el crear, ejecutar y mantener las operaciones de calidad de datos...</p> <p>Antes empezar necesitaremos tener instalado en nuestro servidor lo necesario para empezar a probar. Lanzamos el instalador de SqlServer y añadimos a nuestra instancia de SqlServer Data Quality Services, bajo el motor de la base de datos y en el caso de probar con una máquina virtual también el cliente de calidad de datos.</p> <p><img src="/files/uploads/103image/dqs_02.jpg" alt="Caracteristicas de Microsoft SQL Server Data Quality Services" /></p> <p>Una vez completada la instalación activamos la parte del Servidor. Lo encontramos en el menú <em>Inicio &gt; Programas &gt; Microsoft SQL Server 2014 CTP&gt;Data Quality Server Installer </em></p> <p><img src="/files/uploads/103image/dqs_03.jpg" alt="Microsoft Data Quality Server" /></p> <p>Además de los componentes de servidor, eso también copia una base de conocimento de ejemplo, <em>DQS Data</em>, que incluye algunos dominios predefinidos. Superado este paso ya podemos empezar con nuestro ejemplo. Para las pruebas tendremos dos tablas de empleados como esta que usaremos primero como base para crear las reglas para nuestra base de datos de conocimiento y una vez definidos dominios con sus reglas de validación, las usaremos para probar de corregir los datos y exportarlos a otra tabla de sqlserver.</p> <p> </p> --Script de carga para las tablas de ejemplo. CREATE TABLE [dbo].[EmpleadosA]( [Nombre] [varchar](20) NULL, [Genero] [varchar](10) NULL, [Edad] [tinyint] NULL ) ON [PRIMARY] INSERT INTO [dbo].[EmpleadosA] VALUES ('John','Male',18) INSERT INTO [dbo].[EmpleadosA] VALUES ('Mike', 'Hombre',18) INSERT INTO [dbo].[EmpleadosA] VALUES ('Rahul', 'Ind',NULL) INSERT INTO [dbo].[EmpleadosA] VALUES ('Sara','Mujer',23) INSERT INTO [dbo].[EmpleadosA] VALUES ('Alberto','H',48) INSERT INTO [dbo].[EmpleadosA] VALUES ('Carlos','Hombre',18) GO CREATE TABLE [dbo].[EmpleadosB]( [Nombre] [varchar](20) NULL, [Email] [varchar](40) NULL, [Titulo] [varchar](20) NULL ) ON [PRIMARY] INSERT INTO [dbo].[EmpleadosB] VALUES ('John','jhon@test.com',NULL) INSERT INTO [dbo].[EmpleadosB] VALUES ('Mike','Mike test.com','Bachillerato') INSERT INTO [dbo].[EmpleadosB] VALUES ('Rahul',' ','Primaria) INSERT INTO [dbo].[EmpleadosB] VALUES ('Sara','sara@test.com','PM') INSERT INTO [dbo].[EmpleadosB] VALUES ('Alberto','alberto@test','Secundaria') INSERT INTO [dbo].[EmpleadosB] VALUES ('Carlos','test@test.com','Licenciado') GO <p>A continuación ya podemos abrir el Cliente de Calidad de Datos (Microsoft SQL Server 2014&gt;Data Quality Client) para empezar a trastear. Nada más clicar nos pide el nombre del servidor (pensemos en nuestra instancia de servidor SQLSERVER). Lo primero que debemos hacer es crear una <em>Nueva base de Conocimiento</em>.</p> <p><img src="/files/uploads/103image/dqs_06.jpg" alt="Microsoft Data Quality Cliente" /></p> <p>Lo siguiente será crear una nueva. Le ponemos Nombre y pulsamos <em>siguiente</em>. Cerramos y volvemos al menú principal. A continuación Lo que haremos será elegir de nuestra base de datos la "<em>Detección de conocimiento</em>". Esta opción permite elegir una fuente de datos (excel, sqlserver) y definir dominios a partir de columnas de datos. En mi caso me conecto a la bbdd, elijo una de los tablas de ejemplo para empezar a definir para cada columna que me interese un <em>dominio </em>con parámetros específicos en cada columna que lo necesite... Particularmete interesante la opción de poder elegir, en el caso de una columna de texto, el idioma del mismo, pasarle el corrector ortográfico y también formatear la salida (MAY/MIN para abreviaturas?).</p> <p><img src="/files/uploads/103image/dqs_07.jpg" alt="Microsoft Data Quality base de conocimiento" /></p> <p>El paso siguiente es el "análisis de detección de datos en el origen seleccionado". Se escanea el origen y se determina por cada columna los valores únicos, los validos y los que infringen la integridad (valores null etc). Si hemos probado sobre EmpleadosA solo vemos un error de integridad debido a un <em>NULL </em>en la  columna Edad. Pulsamos siguiente y podemos elegir que hacer con los nuevos valores que sean validos, así como ignorar los incorrectos marcándolos como error.</p> <p>(<img src="/files/uploads/103image/dqs_08.jpg" alt="Administración de la base de conocimiento de Microsoft DQS" /></p> <p>Ahora, antes de validar de nuevo, definiremos un dominio más complejo para los campos de email. En este caso será una regla de validación de formato. Primero vamos como a antes a la detección de dominios para definir sobre la segunda tabla el dominio sobre la columna email (como el los ejemplos anteriores). Una vez hemos creado el dominio para el campo email, la diferencia es que saldremos y entraremos en el Administrador de dominios sobre nuestra base de datos de conocimiento y modificaremos las Reglas de Dominio (fijaros también que aquí podemos explorar los Valores del Dominio que forman parte de él) para añadir una del tipo: <em>"El valor coincide con la expresión regular": ^[_a-z0-9-]+(\.[a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$</em></p> <p><img src="/files/uploads/103image/dqs_09.jpg" alt="Administracion de dominios de Microsoft DQS" /></p> <p> </p> <p>Al final publicamos este último cambio de este dominio y ya estamos listos para continuar. </p> <p>El último paso ya para acabar con esta prueba es validar una tabla real, corregir los datos y exportar a una nueva con los datos que no cumplan las reglas y decidamos corregir. Para hacerlo abrimos de nuevo el Data Quality Client y creamos un nuevo proyecto de calidad de datos. Le pondremos nombre, elegimos la base de conocimiento que hemos definido antes y elegimos limpieza. Los pasos a partir de aquí son parecidos a los anteriores cuando explorábamos la tabla. En el siguiente paso elegimos la tabla a limpiar y para cada columna, si es necesario, un dominio para aplicar sobre ella. Pulsamos siguiente y escaneamos los datos. Con los datos de ejemplo, detectara dos valores para email erróneos que podremos corregir (si han sido corregidos anteriormente los auto-corrige y aparecen como "Corregido"). Finalmente, en el siguiente paso podemos elegir donde exportar nuestros datos pulidos (por ejemplo a una nueva tabla).</p> <p><img src="/files/uploads/103image/dqs_10.jpg" alt="Proyecto de calidad de datos de Microsoft Data Quality Services (DQS)" /></p> <p> </p> <p><strong>Mis conclusiones son...</strong></p> <p>... que esta es otra herramienta Microsoft bastante fácil de usar y puede que bastante útil para pulir datos maestros de cualquier base de datos o para incluir validaciones como paso intermedio en nuestras cargas para el dwh. Su sencillez (la misma prueba con el proyecto de calidad de datos) hace fácil compartir la carga de corrección manual de los datos con alguien que no sea técnico de bbdd ni programador, más bien una persona dentro de la organización con conocimiento de causa que coja los datos del origen, los interprete y los deje donde tu le digas para cargarlos en algún sitio.</p> <p> </p></div> <div class="field field--name-field-it-tags field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix field__items"> <div class="field__item"><a href="/it-tags/administracion-sql-server" hreflang="es">Administracion Sql Server</a></div> <div class="field__item"><a href="/it-tags/dqs" hreflang="es">Dqs</a></div> <div class="field__item"><a href="/it-tags/sql-server-2014" hreflang="es">SQL Server 2014</a></div> <div class="field__item"><a href="/it-tags/ssis" hreflang="es">SSIS</a></div> </div> <span class="a2a_kit a2a_kit_size_32 addtoany_list" data-a2a-url="https://www.dataprix.com/blog-it/ilmasacratore/sql-server-2014-dqs-data-quality-services" data-a2a-title="SQL Server 2014 DQS (Data Quality Services)"><a class="a2a_button_x"></a><a class="a2a_button_linkedin"></a><a class="a2a_button_facebook"></a><a class="a2a_button_buffer"></a></span> <section class="field field--name-comment-node-blog field--type-comment field--label-hidden comment-wrapper"> <article role="article" data-comment-user-id="0" id="comment-3240" class="comment js-comment by-anonymous clearfix"> <span class="hidden new-indicator" data-comment-timestamp="1385200507"></span> <header> <article typeof="schema:Person" about="/en/user/anonimo" class="profile"> </article> </header> <div class="comment__content-container"> <h3 class="title"><a href="/comment/3240#comment-3240" class="permalink" rel="bookmark" hreflang="es">Articulo muy interesante,</a></h3> <div class="comment__meta"> <p class="comment__submitted">Subido por <span lang="" typeof="schema:Person" property="schema:name" datatype="">Anonimo (no verificado)</span> el 23 Noviembre, 2013 - 10:55</p> </div> <div class="comment__content"> <div class="clearfix text-formatted field field--name-comment-body field--type-text-long field--label-hidden field__item">Articulo muy interesante, como comentario, la frase:"alguien que no sea técnico de bbdd ni programador" , no veo a usuarios escribiendo expresiones regulares, a modo de anécdota.Jejeje.</div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=3240&amp;1=default&amp;2=es&amp;3=" token="Ee3ElRZOeWY0b64zeBJp_HUsLrgbF6q9Mp96WRwx-jk"></drupal-render-placeholder> </div> </div> </article> </section> Thu, 21 Nov 2013 11:53:02 +0000 il_masacratore 75204 at https://www.dataprix.com