Este documento presenta una sesión sobre el uso de SQLCLR .NET en el núcleo de SQL Server. Discutirá los pros y contras de usar .NET para programar objetos de base de datos desde una perspectiva funcional y de rendimiento, y responderá a la pregunta de cuándo es bueno usar SQLCLR. La sesión cubrirá la integración de CLR en SQL Server, consideraciones de seguridad, memoria y rendimiento al usar SQLCLR.
1. SQLCLR .NET en el core de SQL Server
22 de Abril 2015 (12 pm GMT -5)
Enrique Catala
Resumen:
Es posible utilizar .NET para programar funciones,
procedimientos almacenados... en SQL Server pero... ¿es
una buena idea hacerlo? SQLCLR es un recurso
interesante para cualquier desarrollador de base de datos
que nos permite sacar partido ante ciertas situaciones
que el propio lenguaje T-SQL no nos permite. En esta
sesión veremos pros y contras de utilizar .NET para
programar nuestros objetos de BBDD desde un punto de
vista funcional y de rendimiento. La idea es responder a
la eterna pregunta: ¿Cuándo es bueno usar SQLCLR?
Está por comenzar:
Próximos Eventos
Moderador: José L. Rivera
Preguntando a Sql Server con
DMV
13 de Mayo
Ahias Portillo
BIML para automatizar patrones
de ETL
20 de Mayo
Miguel Egea
Always ON de 0 a 100, lecciones
aprendidas de la vida real para
un DRP
27 de Mayo
Jesus Gil
2. Manténgase conectado a nosotros!
Visítenos en http://globalspanish.sqlpass.org
/SpanishPASSVC
lnkd.in/dtYBzev
/user/SpanishPASSVC
/SpanishPASSVC
4. 4
Oportunidades de Voluntariado
PASS no pudiera existir sin personas apasionadas y
dedicadas de todas partes del mundo que dan de su
tiempo como voluntarios.
Se un voluntario ahora!!
Para identificar oportunidades locales visita
volunteer.sqlpass.org
Recuerda actualizar tu perfil en las secciones de
“MyVolunteering” y MyPASS para mas detalles.
6. SQLCLR .NET en el core de SQL Server
6 de Mayo de 2015
Enrique Catalá Bañuls
MVP en SQL Server | MCT | MCITP | MCTS
Mentor en SolidQ
PASS | SQL Saturday
Moderador: José L. Rivera
7. • Arquitecto de varias soluciones corporativas como
HealthCheck, SQL2Cloud,…
• T-SQL, .NET, SSIS, arquitecturas escalables, alta
disponibilidad
Un poco sobre mi…
9. • Todos los recursos manejados y trazados por SQL Server
• SQL Server 2012, 2014 : .NET 4.0
• SQL Server 2005 -> 2008 R2: .NET 2.0
• SAFE (default)
• EXTERNAL_ACCESS (confiable)
• UNSAFE (no confiable por sql server)
Integración CLR
10. • Memory buffers, T-SQL, SQLCLR
• Puntos de control para administrar
• Reserva-liberación de memoria
• Operaciones de E/S
Integracion CLR
11. • Optimizaciones específicas a tipos de datos
• Tipo de parámetro (in-out)
• Semántica
• Nulabilidad
• Restricciones
• Se evita boxing-unboxing en llamadas
• En la primera ejecución
• Mide tiempos a partir de 2ª ejecucion
Integracion CLR: Compilación
14. Seguridad
• Calculos
• Acceso a datos localSafe
• SAFE + Acceso a recursos del sistema
• Archivos, redes, variables entorno y registro
External
Access
• Sin restricciones de ningún tipo
• Permite incluso lanzar código no administradoUnsafe
15. Consideraciones de memoria
Cara Costes de licencia
Libera tu
memoria!
Malas practicas de
programación?
Considera
LOH
Large Object Heap,
GC, fragmentación…
rendimiento
24. Preguntando a SQL Server con DMV
20 de Mayo (12 pm GMT -5)
Ahias Portillo
Resúmen:
En esta sesión veremos algunas consultas que nos
permitirán conocer secretos ocultos de Sql Server, que
podrían salvarnos en más de una vez en problemas de
rendimiento.
Próximo Evento
Notas del editor
Desde preview V12 de Azure SQL Databases se pueden ensamblados tipo SAFE
Hay que descargar los parches para V12 a fecha de (26-02-2015) para poder desplegar en Azure
http://www.microsoft.com/en-us/download/details.aspx?id=45320
http://www.microsoft.com/en-us/download/details.aspx?id=45319
MPA -> Multi page allocator
DWA -> Direct Windows Allocations
TS -> Thread Stacks
Desplegar objetos de diversos tipos. Alguno desplegado de forma manual
Ensamblados que pueden ser referenciados directamente, no hace falta cargarlos antes.
Si necesitas algo que no esté en estos ensamblados, los puedes cargar con CREATE ASSEMBLY para poder utilizarlos
Reservas de más de 85KB se almacenan directamente en la LOH, que fuerza al GC a actuar mas lentamente y escalar peor la memoria
Si tienes SQL 2012+, utiliza colecciones del namespace System.Collections.Concurrent porque además de ser multithread no bloqueantes, si solo tienes 1 hilo, tienen menor tamaño de memoria y además no utilizan el área LOB
No proceses millones de filas en CLR, intenta que tus llamadas a CLR se dividan en varias veces
SqlString es útil para trabajar con varchar(max)
SqlString struct, SqlChars clase
SqlChars es mutable, podemos cambiar sin requerir nueva reserva de memoria
Demos de tipos de datos indexados, uso de sp y tvf donde se vea que accediendo a datos se va mucho peor…costes de inicialización,…
Scheduler -> abstracción de CPU
Worker -> abstracción de thread
Task -> la operación que se lanza desde el worker
Scheduler -> abstracción de CPU
Worker -> abstracción de thread
Task -> la operación que se lanza desde el worker
Pero recuerda que tenemos código INMEMORY OLTP y que salvo excepciones, las soluciones de cursores son la última salida
No hay una regla fija, pero generalmente, cuanta mayor es la carga en CPU, generalmente mejor aprovechamiento de la misma obtendremos usando CLR.
Recuerda que si puedes llevarte parte a tu aplicación cliente, mejor.
*Aceder a recursos externos requiere eliminar la seguridad del ensamblado, tenlo siempre MUY presente