slides

17
SQL CLR Internals SQL CLR Internals David Carmona David Carmona [email protected] [email protected] División de Desarrolladores y Plataforma División de Desarrolladores y Plataforma Microsoft Ibérica Microsoft Ibérica

Transcript of slides

Page 1: slides

SQL CLR InternalsSQL CLR Internals

David CarmonaDavid [email protected]@microsoft.com División de Desarrolladores y PlataformaDivisión de Desarrolladores y PlataformaMicrosoft IbéricaMicrosoft Ibérica

Page 2: slides

Esta sesión está dirigida a gente curiosaEsta sesión está dirigida a gente curiosa

o simplemente…o simplemente…

que le gusta perder el tiempo.que le gusta perder el tiempo.

Page 3: slides

SQL Server como host del SQL Server como host del CLRCLR

SQL Server hospeda al CLRSQL Server hospeda al CLRCódigo .NET corriendo en el mismo procesoCódigo .NET corriendo en el mismo proceso

Bueno, esto es fácil…Bueno, esto es fácil…Todos lo hacemos desde VB6, como Don Todos lo hacemos desde VB6, como Don Box…Box…

… … ¿y qué pasa con?¿y qué pasa con?Carga de assembliesCarga de assemblies

Gestión de la memoriaGestión de la memoria

Condiciones excepcionalesCondiciones excepcionales

HilosHilos

SeguridadSeguridad

Page 4: slides

ICLRRuntimeHostICLRRuntimeHost

Dos interfaces en CLRDos interfaces en CLRICorRuntimeHostICorRuntimeHost

ICLRRuntimeHost (nuevo)ICLRRuntimeHost (nuevo)

ICLRRuntimeHost mucho más potenteICLRRuntimeHost mucho más potenteSetHostControl permite interceptar casi todoSetHostControl permite interceptar casi todo

Carga de assemblies, locks, hilos, memoria…Carga de assemblies, locks, hilos, memoria…

Interfaz Métodos típicos

IHostMemoryManager VirtualAlloc, VirutalFree

IHostTaskManager CreateTask, Sleep

IHostThreadPoolManager QueueUserWorkItem

IHostIoCompletionManager CreateIoCompletionPort

IHostSyncManager CreateMonitorEvent

IHostAssemblyManager GetAssemblyStore

IHostGCManager SuspensionStarting

Page 5: slides

Hosting del CLR 2.0Hosting del CLR 2.0

Page 6: slides

Cargador de ensambladosCargador de ensamblados

El cargador por defecto no nos valeEl cargador por defecto no nos valeSQL Server almacena los ensambladosSQL Server almacena los ensamblados

Interfaz IHostAssemblyManagerInterfaz IHostAssemblyManagerDevuelve lista de ensamblados “blessed”Devuelve lista de ensamblados “blessed”

Carga habitualCarga habitual

Para los demás IHostAssemblyStorePara los demás IHostAssemblyStoreMétodo ProvideAssemblyMétodo ProvideAssembly

Devuelve Stream del ensamblado especificadoDevuelve Stream del ensamblado especificado

Page 7: slides

Application DomainsApplication Domains

Los Application Domains proporcionan Los Application Domains proporcionan entornos de aislamientoentornos de aislamiento

Usados por SQL Server para garantizar Usados por SQL Server para garantizar la seguridad y fiabilidadla seguridad y fiabilidad

Por base de datos y ownerPor base de datos y owner

¡Cuidado!¡Cuidado!Podemos hacer reflection con mismo ownerPodemos hacer reflection con mismo owner

Podemos lanzar nuevos AppDomainsPodemos lanzar nuevos AppDomains

Page 8: slides

SeguridadSeguridadNivel de permisos Descripción

SAFE Código verificable, sin Interop ni acceso externo a recursos

EXTERNAL ACCESS Acceso a recursos externos

UNSAFE Todos los permisos

Validación de códigoValidación de código

Al crear el assemblyAl crear el assembly

Reglas básicas (SAFE / EXTERNAL)Reglas básicas (SAFE / EXTERNAL)

Código verificable (type safe)Código verificable (type safe)

FinalizersFinalizers

Miembros estáticos mutablesMiembros estáticos mutables

……

Page 9: slides

Seguridad (II)Seguridad (II)

Todos los ensamblados tienen que estar Todos los ensamblados tienen que estar almacenadosalmacenados

Excepto lista “blessed”Excepto lista “blessed”

De la lista “blessed” no todo es usableDe la lista “blessed” no todo es usableAtributo HostProtection con riesgo asociadoAtributo HostProtection con riesgo asociado

SharedStateSharedState

SynchronizationSynchronization

ExternalThreadingExternalThreading

……

Page 10: slides

SeguridadSeguridad

Page 11: slides

La memoriaLa memoria

SQL Server no es una aplicación SQL Server no es una aplicación “corriente”“corriente”

Utiliza toda la memoria posibleUtiliza toda la memoria posible

La mantiene al límite de la paginaciónLa mantiene al límite de la paginación

SQL Server utiliza IHostMemoryManagerSQL Server utiliza IHostMemoryManagerGestiona la memoria CLR como un recurso Gestiona la memoria CLR como un recurso másmás

Puntos de controlPuntos de controlReserva / liberación de memoriaReserva / liberación de memoria

Puesta en marcha del recolectorPuesta en marcha del recolectorEn ambos sentidosEn ambos sentidos

Page 12: slides

Gestión de hilosGestión de hilos

Con los hilos nos hemos topado…Con los hilos nos hemos topado…

SQL Server es non-preemptiveSQL Server es non-preemptiveLas tareas deben cooperar con el UMSLas tareas deben cooperar con el UMS

En SQL Server tarea != hiloEn SQL Server tarea != hiloModo fibraModo fibra

Interfaz IHostTaskManagerInterfaz IHostTaskManagerVirtualiza la gestión de hilosVirtualiza la gestión de hilos

Permite el funcionamiento semi-cooperativoPermite el funcionamiento semi-cooperativoSQL Server hace “yield” sobre hilos egoístasSQL Server hace “yield” sobre hilos egoístas

Aprovecha cualquier oportunidad…Aprovecha cualquier oportunidad…

Page 13: slides

HilosHilos

Page 14: slides

BloqueosBloqueos

El recolmo… ¿qué hacemos con los El recolmo… ¿qué hacemos con los bloqueos?bloqueos?

Interfaz IHostSyncManagerInterfaz IHostSyncManagerSQL Server toma el control de los SQL Server toma el control de los bloqueos .NETbloqueos .NET

Bloqueos .NET mapeados a bloqueos Bloqueos .NET mapeados a bloqueos SQLSQL

Permite su gestión unificadaPermite su gestión unificada

¿Difícil de creer?¿Difícil de creer?

Page 15: slides

BloqueosBloqueos

Page 16: slides

ConclusionesConclusiones

Esto es complicado…Esto es complicado…

Tres leccionesTres leccionesFiabilidadFiabilidad

EscalabilidadEscalabilidad

SeguridadSeguridad

Page 17: slides