slides
-
Upload
webhostingguy -
Category
Documents
-
view
131 -
download
1
Transcript of 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
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.
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
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
Hosting del CLR 2.0Hosting del CLR 2.0
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
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
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
……
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
……
SeguridadSeguridad
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
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…
HilosHilos
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?
BloqueosBloqueos
ConclusionesConclusiones
Esto es complicado…Esto es complicado…
Tres leccionesTres leccionesFiabilidadFiabilidad
EscalabilidadEscalabilidad
SeguridadSeguridad