Optimización de las operaciones de XenMobile®
El rendimiento y la estabilidad de las operaciones de XenMobile implican muchas configuraciones en XenMobile y dependen de la configuración de tu Citrix ADC y de la base de datos de SQL Server. Este artículo se centra en la configuración que los administradores suelen ajustar con más frecuencia, relacionada con el ajuste y la optimización de XenMobile. Citrix te recomienda que evalúes cada una de las configuraciones de este artículo antes de implementar XenMobile.
Importante:
Estas directrices asumen que la CPU y la RAM del servidor XenMobile son adecuadas para el número de dispositivos. Para obtener más información sobre la escalabilidad, consulta Escalabilidad y rendimiento.
Las siguientes propiedades del servidor se aplican globalmente a las operaciones, los usuarios y los dispositivos de toda una instancia de XenMobile. Un cambio en algunas propiedades del servidor requiere reiniciar cada nodo del servidor XenMobile. XenMobile te notifica cuando se requiere un reinicio.
Estas directrices de ajuste se aplican tanto a entornos agrupados como a entornos no agrupados.
hibernate.c3p0.idle_test_period
Esta propiedad del servidor XenMobile, una clave personalizada, determina el tiempo de inactividad en segundos antes de que una conexión se valide automáticamente. Configura la clave de la siguiente manera. El valor predeterminado es 30.
- Clave: Clave personalizada
- Clave: hibernate.c3p0. idle_test_period
- Valor: 120
- Nombre para mostrar: hibernate.c3p0. idle_test_period
- Descripción: Período de prueba de inactividad de Hibernate
hibernate.c3p0.max_size
Esta clave personalizada determina el número máximo de conexiones que XenMobile puede abrir a la base de datos de SQL Server. XenMobile usa el valor que especifiques para esta clave personalizada como límite superior. Las conexiones se abren solo si las necesitas. Basa tu configuración en la capacidad de tu servidor de bases de datos.
Ten en cuenta la siguiente ecuación en una configuración agrupada. Tu conexión c3p0 multiplicada por el número de nodos es igual al número máximo real de conexiones que XenMobile puede abrir a la base de datos de SQL Server.
En configuraciones agrupadas y no agrupadas, establecer un valor demasiado alto con un SQL Server de tamaño insuficiente puede causar problemas de recursos en el lado de SQL durante la carga máxima. Establecer un valor demasiado bajo significa que es posible que no puedas aprovechar los recursos de SQL disponibles.
Configura la clave de la siguiente manera. El valor predeterminado es 1000.
- Clave: hibernate.c3p0.max_size
- Valor: 1000
- Nombre para mostrar: hibernate.c3p0.max_size
- Descripción: Conexiones de BD a SQL
hibernate.c3p0.min_size
Esta clave personalizada determina el número mínimo de conexiones que XenMobile abre a la base de datos de SQL Server. Configura la clave de la siguiente manera. El valor predeterminado es 100.
- Clave: hibernate.c3p0.min_size
- Valor: 100
- Nombre para mostrar: hibernate.c3p0.min_size
- Descripción: Conexiones de BD a SQL
hibernate.c3p0.timeout
Esta clave personalizada determina el tiempo de espera de inactividad. Si usas una conmutación por error de clúster de base de datos, Citrix te recomienda que agregues esta clave personalizada y la configures para reducir el tiempo de espera de inactividad. El valor predeterminado es 120.
- Clave: Clave personalizada
- Clave: hibernate.c3p0.timeout
- Valor: 120
- Nombre para mostrar: hibernate.c3p0.timeout
- Descripción: Tiempo de espera de inactividad de la base de datos
Intervalo de latido de los servicios Push
Esta configuración determina la frecuencia con la que un dispositivo iOS comprueba si una notificación APNs no se ha entregado mientras tanto. Aumentar la frecuencia del latido de APNs puede optimizar las comunicaciones de la base de datos. Un valor demasiado grande puede añadir una carga innecesaria. Esta configuración se aplica solo a iOS. El valor predeterminado es de 20 horas.
Si tienes muchos dispositivos iOS en tu entorno, el intervalo de latido puede generar una carga superior a la necesaria. Las acciones de seguridad, como el borrado selectivo, el bloqueo y el borrado completo, no dependen de este latido. La razón es que se envía una notificación APNs al dispositivo cuando se ejecutan estas acciones.
Este valor rige la rapidez con la que se actualiza una política después de los cambios en la pertenencia a grupos de Active Directory. Por lo tanto, a menudo es adecuado aumentar este valor a algo entre 12 y 20 horas para reducir la carga.
Tamaño del grupo de conexiones APNS de iOS MDM
Un grupo de conexiones APNs demasiado pequeño puede afectar negativamente al rendimiento de la actividad de APNs cuando tienes más de 100 dispositivos. Los problemas de rendimiento incluyen una implementación más lenta de aplicaciones y políticas en los dispositivos y un registro de dispositivos más lento. El valor predeterminado es 1. Te recomendamos que aumentes este valor en 1 por cada 400 dispositivos aproximadamente.
auth.ldap.connect.timeout
Para compensar las respuestas LDAP lentas, Citrix te recomienda que agregues propiedades de servidor para la siguiente clave personalizada.
- Clave: Clave personalizada
- Clave: auth.ldap.connect.timeout
- Valor: 60000
- Nombre para mostrar: auth.ldap.connect.timeout
- Descripción: Tiempo de espera de conexión LDAP
auth.ldap.read.timeout
Para compensar las respuestas LDAP lentas, Citrix te recomienda que agregues propiedades de servidor para la siguiente clave personalizada.
- Clave: Clave personalizada
- Clave: auth.ldap.read.timeout
- Valor: 60000
- Nombre para mostrar: auth.ldap.read.timeout
- Descripción: Tiempo de espera de lectura LDAP
Otras optimizaciones del servidor
| Propiedad del servidor | Configuración predeterminada | ¿Por qué cambiar esta configuración? |
|---|---|---|
| Implementación en segundo plano | 1,440 minutos | La frecuencia de las implementaciones de políticas en segundo plano, en minutos. Se aplica solo a las conexiones siempre activas para dispositivos Android. Aumentar la frecuencia de las implementaciones de políticas reduce la carga del servidor. La configuración recomendada es 1440 (24 horas). |
| Inventario de hardware en segundo plano | 1,440 minutos | La frecuencia del inventario de hardware en segundo plano, en minutos. Se aplica solo a las conexiones siempre activas para dispositivos Android. Aumentar la frecuencia del inventario de hardware reduce la carga del servidor. La configuración recomendada es 1440 (24 horas). |
| Intervalo para comprobar usuarios eliminados de Active Directory | 15 minutos | El tiempo de sincronización estándar para Active Directory es de 15 minutos. El valor 0 evita que XenMobile compruebe si hay usuarios de Active Directory eliminados. La configuración recomendada es de 15 minutos. |
| MaxNumberOfWorker | 3 | El número de subprocesos utilizados al importar muchas licencias de compra por volumen. El valor predeterminado es 3. Si necesitas una mayor optimización, puedes aumentar el número de subprocesos. Sin embargo, con un número mayor de subprocesos, como 6, una importación de compra por volumen da como resultado un alto uso de la CPU. |
Cómo comprobar interbloqueos en una base de datos SQL y eliminar datos históricos
Cuando veas interbloqueos, ejecuta la siguiente consulta para ver los interbloqueos. Luego, un administrador de bases de datos o el equipo de Microsoft SQL pueden confirmar la información.
SQL Query
SELECT
db.name DB_Service,
tl.request_session_id,
wt.blocking_session_id,
OBJECT_NAME(p.OBJECT_ID) BlockedObjectName,
tl.resource_type,
h1.TEXT AS RequestingText,
h2.TEXT AS BlockingTest,
tl.request_mode
FROM sys.dm_tran_locks AS tl
INNER JOIN sys.databases db ON db.database_id = tl.resource_database_id
INNER JOIN sys.dm_os_waiting_tasks AS wt ON tl.lock_owner_address = wt.resource_address
INNER JOIN sys.partitions AS p ON p.hobt_id = tl.resource_associated_entity_id
INNER JOIN sys.dm_exec_connections ec1 ON ec1.session_id = tl.request_session_id
INNER JOIN sys.dm_exec_connections ec2 ON ec2.session_id = wt.blocking_session_id
CROSS APPLY sys.dm_exec_sql_text(ec1.most_recent_sql_handle) AS h1
CROSS APPLY sys.dm_exec_sql_text(ec2.most_recent_sql_handle) AS h2
GO
<!--NeedCopy-->
Limpiar la base de datos
Importante:
Haz una copia de seguridad de tu base de datos antes de realizar cambios en las tablas.
-
Ejecuta la siguiente consulta para comprobar los datos históricos.
select COUNT(*) as total_record from dbo.EWDEPLOY_HISTO; select COUNT(*) as total_record from dbo.EWSESS; select COUNT(*) as total_record from dbo.EWAUDIT; <!--NeedCopy--> -
Elimina los datos de las tres tablas anteriores.
Nota:
Es posible que no veas datos históricos en una tabla. Si es así, omite la ejecución de la consulta de truncamiento para esa tabla en particular.
truncate TABLE dbo.EWDEPLOY_HISTO; truncate TABLE dbo.EWSESS; truncate TABLE dbo.EWAUDIT; <!--NeedCopy--> -
Desbloquea las consultas SELECT que se bloquearon debido a interbloqueos. Este paso se encarga de evitar futuros interbloqueos.
ALTER DATABASE <database_name> SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE <!--NeedCopy--> -
De forma predeterminada, la limpieza de la base de datos es de siete días para retener los datos de retención de sesión y retención de auditoría, lo cual es alto para muchos usuarios. Cambia el valor de limpieza a 1 o 2 días. En las propiedades del servidor, realiza el siguiente cambio:
zdm.dbcleanup.sessionRetentionTimeInDays = 1 day zdm.dbcleanup.deployHistRetentionTimeInDays = 1 day zdm.dbcleanup.auditRetentionTimeInDays=1 day <!--NeedCopy-->
Limpiar huérfanos en la tabla KEYSTORE
Si los nodos de XenMobile tienen un rendimiento deficiente, comprueba si la tabla KEYSTORE es demasiado grande. El servidor XenMobile almacena los certificados de inscripción en las tablas ENROLLMENT_CERTIFICATE y KEYSTORE. Cuando eliminas o vuelves a inscribir dispositivos, los certificados de la tabla ENROLLMENT_CERTIFICATE se eliminan. Las entradas de la tabla KEYSTORE permanecen, lo que puede causar problemas de rendimiento. Realiza el siguiente procedimiento para limpiar los huérfanos de la tabla KEYSTORE.
Importante:
Haz una copia de seguridad de tu base de datos antes de realizar cambios en las tablas.
-
Ejecuta la siguiente consulta para comprobar los datos históricos.
select COUNT(*) from KEYSTORE <!--NeedCopy--> -
Comprueba si hay huérfanos en la tabla KEYSTORE con la siguiente consulta.
WITH cte(KEYSTORE_ID) AS (SELECT KEYSTORE_ID FROM ENROLLMENT_CERTIFICATE UNION SELECT CA_KEYSTORE_ID FROM LDAP_CONFIG UNION SELECT CLIENT_KEYSTORE_ID FROM LDAP_CONFIG UNION SELECT KEYSTORE_ID FROM SAML_SERVICE_PROVIDER UNION SELECT KEYSTORE_ID FROM SERVER_CERTIFICATE) SELECT keystore.id FROM keystore LEFT JOIN cte ON keystore.id = cte.KEYSTORE_ID WHERE KEYSTORE_ID IS NULL; <!--NeedCopy--> -
Borra los huérfanos con la siguiente consulta.
WITH cte(KEYSTORE_ID) AS (SELECT KEYSTORE_ID FROM ENROLLMENT_CERTIFICATE UNION SELECT CA_KEYSTORE_ID FROM LDAP_CONFIG UNION SELECT CLIENT_KEYSTORE_ID FROM LDAP_CONFIG UNION SELECT KEYSTORE_ID FROM SAML_SERVICE_PROVIDER UNION SELECT KEYSTORE_ID FROM SERVER_CERTIFICATE) DELETE FROM keystore WHERE id IN ( SELECT keystore.id FROM keystore LEFT JOIN cte ON keystore.id = cte.KEYSTORE_ID WHERE KEYSTORE_ID IS NULL AND keystore.TYPE = 'X_509' ); <!--NeedCopy--> -
Agrega un índice a la tabla KEYSTORE para mejorar la eficiencia de búsqueda.
DROP INDEX "KEYSTORE_NAME_IDX" ON "KEYSTORE"; ALTER TABLE "KEYSTORE" ALTER COLUMN "NAME" NVARCHAR(255) NULL; CREATE INDEX "KEYSTORE_NAME_IDX" ON "KEYSTORE"("NAME") INCLUDE ("ID", "TYPE", "CONTENT", "PASSWORD", "PUBLICLY_TRUSTED", "DESCRIPTION", "ALIAS", "MODIFICATION_DATE"); <!--NeedCopy-->
En este artículo
- hibernate.c3p0.idle_test_period
- hibernate.c3p0.max_size
- hibernate.c3p0.min_size
- hibernate.c3p0.timeout
- Intervalo de latido de los servicios Push
- Tamaño del grupo de conexiones APNS de iOS MDM
- auth.ldap.connect.timeout
- auth.ldap.read.timeout
- Otras optimizaciones del servidor
- Cómo comprobar interbloqueos en una base de datos SQL y eliminar datos históricos