SqlServer: No se admite la ejecución de CLR con agrupación ligera

 

Es una puesta en producción después de hacer una migración a SQLServer 2014, nos encontramos con este problema: “Common language runtime (CLR) execution is not supported under lightweight pooling. Disable one of two options: clr enabled or lightweight pooling”. Después de buscar, leer, mirar documentación encontré un post con la solución que dejo aquí para compartirla.

Exception : System.Data.SqlClient.SqlException

Message (ingles) : Common language runtime (CLR) execution is not supported under lightweight pooling. Disable one of two options: “clr enabled” or “lightweight pooling”.

Message (castellano): No se admite la ejecución de CLR con agrupación ligera. Deshabilite una de las dos opciones: “clr enabled” o “lightweight pooling”.

Nuestro problema era que estamos usando: SELECT FORMAT(…) con lightweight pooling activado,  el FORMAT, SQL lo resuelve haciendo un llamada al CLR con lo cual esto provoca el conflicto. Una opción es quitar la llamada al FORMAT y cambiarlo por CAST o una función propia si no queremos tocar configuración de SQL Server sobretodo en entornos de producción, la otra es la que explico más abajo.

CLR Integration and Lightweight Pooling Conflict

I thought I am CLR Integration Guru in Sql Server but this morning I came to know that there are lots of things left to grab. While I was moving the local database on the new live server I run some CLR Procedure which Says these procedures required CLR Integration enabled. So to get that done.

I went on SQL Server Surface Area Configuration -> Surface Area configuration for features -> Enable CLR Integration. till here, every thing seems fine I encounter no error.

After that when I re-execute the same query I get a new error:

“Invalid connection (Common language runtime (CLR) execution is not supported under lightweight pooling.
Disable one of two options: “clr enabled or “lightweight pooling”.

I really have no idea what the light weight pooling is but the need of the time is to disable it. After googling for a bit I get this link. but still no use as the query written in this page is not working infact it is giving error.

  1.  sp_configure ’show advanced options’, 1;
  2.  GO
  3.  sp_configure ‘lightweightpooling’, 0;
  4.  GO
  5.  RECONFIGURE;
  6.  GO
Error: The configuration option ‘lightweightpooling’ does not exist, or it may be an advanced option.

To find what is going wrong, I quried on sys.configurations because this table contain database configuration.

   select * from sys.configurations where name like ‘%light%’

Finally, after running the above query I came to know that there is a space in ‘lightweightpooling’. It means it is ‘lightweight pooling. Now when I diagnose the problem I execute the following query which make my sql server CLR Integrated.

  1. USE master
  2. GO
  3. EXEC sp_configure ’show advanced options’, 1
  4. GO
  5. RECONFIGURE WITH OVERRIDE
  6. GO
  7. EXEC sp_configure ‘lightweight pooling’, 0
  8. GO
  9. EXEC sp_configure ‘clr enabled’, 1
  10. GO
  11. RECONFIGURE WITH OVERRIDE
  12. GO
  13. EXEC sp_configure ’show advanced options’, 0
  14. GO

After executing the query, we might need to restart the SQL Services to make it work.

 

Recomendación

Como siempre con estos temas, se recomienda realizar primero la prueba en un entorno separado para confirmar que se soluciona el problema detectado y no provoca efectos colaterales, ya que en este caso afecta a la base de datos “master”.

Fuente: https://weblogs.asp.net/aghausman/clr-integration-and-lightweight-pooling-conflict
MSDN: https://docs.microsoft.com/en-us/sql/relational-databases/policy-based-management/disable-lightweight-pooling

 

Anuncios

SqlServer: Analizando Bloqueos, DeadLocks y Select Costosas

Uno de los problemas más complicados que podemos sufrir en nuestras aplicaciones es sin duda el tema de los bloqueos y deadLocks para buscar y encontrar como se han producido en nuestro sistema.

Para entenderlo de forma simple, Microsoft lo explica muy bien aqui: https://technet.microsoft.com/es-es/library/ms178104 y nos da informacion de como detectarlos, controlarlos y minimizarlos.

Por mi experiencia en varias aplicaciones, yo siempre utilizo las siguientes SELECTs que me van muy bien para ver lo que esta pasando en un entorno real de producción.

Información general de databases, sessions y procesos

SELECT * FROM sys.dm_exec_sessions where login_name <> 'sa';

SELECT * FROM sys.sysprocesses where blocked > 0;

SELECT name, is_read_committed_snapshot_on FROM sys.databases;

Información general de los posibles bloqueos en conexiones y peticiones

SELECT Blocker.text , Blocker.*, *
FROM sys.dm_exec_connections AS Conns
INNER JOIN sys.dm_exec_requests AS BlockedReqs
    ON Conns.session_id = BlockedReqs.blocking_session_id
INNER JOIN sys.dm_os_waiting_tasks AS w
    ON BlockedReqs.session_id = w.session_id
CROSS APPLY sys.dm_exec_sql_text(Conns.most_recent_sql_handle) AS Blocker

Información sobre transacciones activas SQL-server

SELECT  L.request_session_id AS SPID,
    DB_NAME(L.resource_database_id) AS DatabaseName,
    O.Name AS LockedObjectName,
    P.object_id AS LockedObjectId,
    L.resource_type AS LockedResource,
    L.request_mode AS LockType,
    ST.text AS SqlStatementText,       
    ES.login_name AS LoginName,
    ES.host_name AS HostName,
    TST.is_user_transaction as IsUserTransaction,
    AT.name as TransactionName,
    CN.auth_scheme as AuthenticationMethod
FROM    sys.dm_tran_locks L
    JOIN sys.partitions P ON P.hobt_id = L.resource_associated_entity_id
    JOIN sys.objects O ON O.object_id = P.object_id
    JOIN sys.dm_exec_sessions ES ON ES.session_id = L.request_session_id
    JOIN sys.dm_tran_session_transactions TST ON ES.session_id = TST.session_id
    JOIN sys.dm_tran_active_transactions AT ON TST.transaction_id = AT.transaction_id
    JOIN sys.dm_exec_connections CN ON CN.session_id = ES.session_id
    CROSS APPLY sys.dm_exec_sql_text(CN.most_recent_sql_handle) AS ST
WHERE   resource_database_id = db_id()
ORDER BY L.request_session_id

Información para análisis de Deaklock Graph XEvent

SELECT XEvent.query('(event/data/value/deadlock)[1]') AS DeadlockGraph
FROM ( SELECT XEvent.query('.') AS XEvent
       FROM ( SELECT CAST(target_data AS XML) AS TargetData
              FROM sys.dm_xe_session_targets st
              JOIN sys.dm_xe_sessions s
              ON s.address = st.event_session_address
              WHERE s.name = 'system_health'
               AND st.target_name = 'ring_buffer'
              ) AS Data
              CROSS APPLY TargetData.nodes
                   ('RingBufferTarget/event[@name="xml_deadlock_report"]')
              AS XEventData ( XEvent )
      ) AS src;

Ultimas select ejecutadas sin necesidad de Profiler

SELECT TOP (50) * 
FROM(SELECT COALESCE(OBJECT_NAME(s2.objectid),'Ad-Hoc') AS ProcName,
 execution_count,s2.objectid,
 (SELECT TOP 1 SUBSTRING(s2.TEXT,statement_start_offset / 2+1 ,
 ( (CASE WHEN statement_end_offset = -1
 THEN (LEN(CONVERT(NVARCHAR(MAX),s2.TEXT)) * 2)
ELSE statement_end_offset END)- statement_start_offset) / 2+1)) AS sql_statement,
 last_execution_time
FROM sys.dm_exec_query_stats AS s1
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2 ) x
WHERE sql_statement NOT like 'SELECT TOP 50 * FROM(SELECT %'
ORDER BY last_execution_time DESC

Ultimas Select más costosas ejecutadas

SELECT TOP (50)
    q.text, s.total_elapsed_time, s.max_elapsed_time, s.min_elapsed_time,
    s.last_elapsed_time, s.execution_count, last_execution_time, *
FROM sys.dm_exec_query_stats as s
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS q
WHERE s.last_execution_time > DateAdd(mi , -1500 , GetDate()) -- solo las recientementes
AND text not like '%sys.%' -- eliminar consulta sys
ORDER BY s.total_elapsed_time DESC

Con esto veremos la memoria RAM que consume cada BBDD

Si lanzamos la query podemos ver el consumo concreto de una base de datos. Y si esta consulta la ejecutamos de forma regular podemos observar si el consumo fluctúa o no.

SELECT database_id, COUNT (*) * 8 / 1024 AS MB_EN_USO 
FROM sys.dm_os_buffer_descriptors
GROUP BY database_id ORDER BY COUNT (*) * 8 / 1024 DESC

Como siempre, espero que os sea de utilidad!!

Libro Gratis: SQL Server 2012 R2

Nuevo libro gratuito “Introducing Microsoft SQL Server 2012”,  publicado por Microsoft Press para conocer de primera mano la nueva versión de  SQL Server 2012.

El libro esta dividido en 2 Partes y 10 capitulos (en ingles):

PART I   DATABASE ADMINISTRATION

1.   SQL Server 2012 Editions and Engine Enhancements

2.   High-Availability and Disaster-Recovery Enhancements

3.   Performance and Scalability

4.   Security Enhancements

5.   Programmability and Beyond-Relational Enhancements

PART II   BUSINESS INTELLIGENCE DEVELOPMENT

6.   Integration Services

7.   Data Quality Services

8.   Master Data Services

9.   Analysis Services and PowerPivot

10.   Reporting Services

Descarga Gratis:  Introducing SQL Server 2012 en Pdf

Tutorial de instalación de SQL Server 2008 R2



Desde la web de Microsoft han publicado esta guia de instalación de SQL Server 2008 R2 paso a paso que os dejo comentada aqui, la instalación de SQL Server 2008 R2 es algo en lo que Microsoft como viene siendo habitual, ha puesto un marcado énfasis para producir un sistema claro y sencillo que nos lleve al éxito con un mínimo esfuerzo.

Esta guía de instalación está centrada en el proceso de instalación de nuevas instancias del motor relacional de SQL Server 2008 R2 de una forma gráfica y rápida.

Para el proceso de instalación, si el entorno de producción involucra un Windows Server 2008, y desde las herramientas del propio sistema operativo se han creado las particiones, este apartado no hace falta validarlo puesto que en forma predeterminada realiza un alineamiento de particiones de 1Mb ref: http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/Perf-tun-srv.docx (página 30, sección DISKPART)

Si por el contrario, el entorno de producción involucra un Windows Server 2000 o Windows Server 2003, o el subsistema de discos ha sido particionado bajo las herramientas administrativas de un Sistema Operativo previo, se recomienda realizar un alineamiento de las particiones donde se albergarán los ficheros .mdf y .ldf de las Bases de datos utilizando diskpart.

Contenidos de la guia en castellano

Más informacion (en ingles)

Para ampliar mas detalles del proceso de instalación, se recomienda seguir el artículo oficial de los libros en pantalla de SQL Server 2008 R2 que puede encontrar aquí: http://msdn.microsoft.com/en-us/library/ms143219.aspx

Lanzamiento SQL Server 2008 R2

Ya tenemos fecha de lanzamiento para SQL Server 2008 R2 que Microsoft presentará mediante un Tour Digital en Barcelona 10 de junio y Madrid 14 de junio, ya ha empezado a presentarlo por todo el mundo y en el enlace podeis ver los videos.

La presentación nos hablará de estos temas y podeis verlo en los videos:

  • Plataforma de Aplicaciones de Microsoft con SQL Server 2008 R2
  • Novedades tecnológicas para potenciar la inteligencia de Negocio: PowerPivot, Report Builder y Master Data Management
  • Nuevos servidores HP ProLiant G7: La mejor plataforma para SQL Server 2008 R2.
  • Unisys: Escalabilidad en entornos virtuales de Misión Crítica.
  • Mejoras para administradores de bases de datos: Application y MultiServer Magament, SQL Datacenter, Hyper-v Live Migration, Compresion y Parallel Data Warehouse
  • Soluciones para Optimizar SQL Server con NetApp, SafeNet y EMC
  • SQL Azure: Alta disponibilidad y flexibilidad de los datos en la nube

Ademas, Microsoft han publicado una web para presentar las nuevas carateristicas (en ingles):

What’s New in SQL Server 2008 R2 Editions

Built on SQL Server 2008, SQL Server 2008 R2 delivers higher mission-critical scale, more efficient IT, and expanded reporting and analytics through self-service business intelligence. SQL Server 2008 R2 introduces two new premium editions to meet the needs of large scale datacenters and data warehouses.

  • SQL Server 2008 R2 Datacenter
  • SQL Server 2008 R2 Parallel Data Warehouse

New Premium Editions

Datacenter

Built on SQL Server 2008 R2 Enterprise, SQL Server 2008 R2 Datacenter is designed to deliver a high-performing data platform that provides the highest levels of scalability for large application workloads, virtualization and consolidation, and management for an organization’s database infrastructure. Datacenter helps enable organizations to cost effectively scale their mission-critical environment.

Key features new to Datacenter:

  • Application and Multi-Server Management for enrolling, gaining insights and managing over 25 instances
  • Highest virtualization support for maximum ROI on consolidation and virtualization
  • High-scale complex event processing with SQL Server StreamInsight™
  • Supports more than 8 processors and up to 256 logical processors for highest levels of scale
  • Supports memory limits up to OS maximum

Parallel Data Warehouse

SQL Server 2008 R2 Parallel Data Warehouse is a highly scalable data warehouse appliance-based solution. Parallel Data Warehouse delivers performance at low cost through a massively parallel processing (MPP) architecture and compatibility with hardware partners – scale your data warehouse to tens and hundreds of terabytes.

Key features new to Parallel Data Warehouse:

  • 10s to 100s TBs enabled by MPP architecture
  • Advanced data warehousing capabilities like Star Join Queries and Change Data Capture
  • Integration with SSIS, SSRS, and SSAS
  • Supports industry standard data warehousing hub and spoke architecture and parallel database copy

Investments in Core Editions

SQL Server 2008 R2 Enterprise

SQL Server 2008 R2 Enterprise delivers a comprehensive data platform that provides built-in security, availability, and scale coupled with robust business intelligence offerings—helping enable the highest service levels for mission-critical workloads.

The following capabilities are new to Enterprise:

  • PowerPivot for SharePoint to support the hosting and management of PowerPivot applications in SharePoint
  • Application and Multi-Server Management for enrolling, gaining insights and managing up to  25 instances
  • Master Data Services for data consistency across heterogeneous systems
  • Data Compression now enabled with UCS-2 Unicode support
  • High-scale complex event processing with SQL Server StreamInsight™

SQL Server 2008 R2 Standard

SQL Server 2008 R2 Standard delivers a complete data management and business intelligence platform for departments and small organizations to run their applications—helping enable effective database management with minimal IT resources.

The following capabilities are new to Standard:

  • Backup Compression to reduce data backups by up to 60% and help reduce time spent on backups *
  • Can be managed instance for Application and Multi-Server Management capabilities
  • High-scale complex event processing with SQL Server StreamInsight™

Fuentes: Technet , Microsoft y Tour Digital

Microsoft SQL Server 2008 R2 Libro Gratis

Continuando con los libros gratis, aqui tenies, otro más, sobre SQL Server 2008 R2, tambien publicado por Microsoft, donde nos enseña por un lado la parte de Administracion y por otro la Parte de Business Inteligent.

El libro esta dividido en 10 capitulos:

CHAPTER 1   SQL Server 2008 R2 Editions and Enhancements 3
CHAPTER 2   Multi-Server Administration 21
CHAPTER 3   Data-Tier Applications 41
CHAPTER 4   High Availability and Virtualization Enhancements 63
CHAPTER 5   Consolidation and Monitoring 85

CHAPTER 6   Scalable Data Warehousing 109
CHAPTER 7   Master Data Services 125
CHAPTER 8   Complex Event Processing with StreamInsight 145
CHAPTER 9   Reporting Services Enhancements 165
CHAPTER 10   Self-Service Analysis with PowerPivot 189

Los enlaces para descargar son estos:

Descargar versión PDF

Descargar versión XPS

Que lo disfruteis.