Optimisation des opérations XenMobile®
Les performances et la stabilité des opérations XenMobile impliquent de nombreux paramètres au sein de XenMobile et dépendent de la configuration de votre Citrix ADC et de votre base de données SQL Server. Cet article se concentre sur les paramètres que les administrateurs configurent le plus souvent, liés à l’optimisation de XenMobile. Citrix vous recommande d’évaluer chacun des paramètres de cet article avant de déployer XenMobile.
Important :
Ces directives supposent que le processeur et la RAM du serveur XenMobile sont suffisants pour le nombre d’appareils. Pour plus d’informations sur l’évolutivité, consultez Évolutivité et performances.
Les propriétés de serveur suivantes s’appliquent globalement aux opérations, aux utilisateurs et aux appareils sur l’ensemble d’une instance XenMobile. Une modification de certaines propriétés de serveur nécessite un redémarrage de chaque nœud du serveur XenMobile. XenMobile vous avertit lorsqu’un redémarrage est nécessaire.
Ces directives d’optimisation s’appliquent aux environnements en cluster et non en cluster.
hibernate.c3p0.idle_test_period
Cette propriété du serveur XenMobile, une clé personnalisée, détermine le temps d’inactivité en secondes avant qu’une connexion ne soit automatiquement validée. Configurez la clé comme suit. La valeur par défaut est 30.
- Clé : Clé personnalisée
- Clé : hibernate.c3p0. idle_test_period
- Valeur : 120
- Nom d’affichage : hibernate.c3p0. idle_test_period
- Description : Période de test d’inactivité d’Hibernate
hibernate.c3p0.max_size
Cette clé personnalisée détermine le nombre maximal de connexions que XenMobile peut ouvrir à la base de données SQL Server. XenMobile utilise la valeur que vous spécifiez pour cette clé personnalisée comme limite supérieure. Les connexions ne s’ouvrent que si vous en avez besoin. Basez vos paramètres sur la capacité de votre serveur de base de données.
Notez l’équation suivante dans une configuration en cluster. Votre connexion c3p0 multipliée par le nombre de nœuds est égale au nombre maximal réel de connexions que XenMobile peut ouvrir à la base de données SQL Server.
Dans les configurations en cluster et non en cluster, définir une valeur trop élevée avec un SQL Server sous-dimensionné peut entraîner des problèmes de ressources côté SQL pendant les pics de charge. Définir une valeur trop basse signifie que vous pourriez ne pas être en mesure de tirer parti des ressources SQL disponibles.
Configurez la clé comme suit. La valeur par défaut est 1000.
- Clé : hibernate.c3p0.max_size
- Valeur : 1000
- Nom d’affichage : hibernate.c3p0.max_size
- Description : Connexions DB à SQL
hibernate.c3p0.min_size
Cette clé personnalisée détermine le nombre minimal de connexions que XenMobile ouvre à la base de données SQL Server. Configurez la clé comme suit. La valeur par défaut est 100.
- Clé : hibernate.c3p0.min_size
- Valeur : 100
- Nom d’affichage : hibernate.c3p0.min_size
- Description : Connexions DB à SQL
hibernate.c3p0.timeout
Cette clé personnalisée détermine le délai d’inactivité. Si vous utilisez un basculement de cluster de base de données, Citrix vous recommande d’ajouter cette clé personnalisée et de la configurer pour réduire le délai d’inactivité. La valeur par défaut est 120.
- Clé : Clé personnalisée
- Clé : hibernate.c3p0.timeout
- Valeur : 120
- Nom d’affichage : hibernate.c3p0.timeout
- Description : Délai d’inactivité de la base de données
Intervalle de pulsation des services Push
Ce paramètre détermine la fréquence à laquelle un appareil iOS vérifie si une notification APNs n’a pas été livrée entre-temps. L’augmentation de la fréquence de pulsation APNs peut optimiser les communications de la base de données. Une valeur trop élevée peut ajouter une charge inutile. Ce paramètre s’applique uniquement à iOS. La valeur par défaut est de 20 heures.
Si vous avez de nombreux appareils iOS dans votre environnement, l’intervalle de pulsation peut entraîner une charge plus élevée que nécessaire. Les actions de sécurité telles que l’effacement sélectif, le verrouillage et l’effacement complet ne dépendent pas de cette pulsation. La raison en est qu’une notification APNs est envoyée à l’appareil lorsque ces actions sont exécutées.
Cette valeur régit la rapidité d’une mise à jour de stratégie après des modifications d’appartenance à un groupe Active Directory. En tant que tel, il est souvent approprié d’augmenter cette valeur à quelque chose entre 12 et 20 heures pour réduire la charge.
Taille du pool de connexions APNS MDM iOS
Un pool de connexions APNs trop petit peut affecter négativement les performances de l’activité APNs lorsque vous avez plus de 100 appareils. Les problèmes de performances incluent un déploiement plus lent des applications et des stratégies sur les appareils et un enregistrement plus lent des appareils. La valeur par défaut est 1. Nous vous recommandons d’augmenter cette valeur de 1 pour environ 400 appareils.
auth.ldap.connect.timeout
Pour compenser les réponses LDAP lentes, Citrix vous recommande d’ajouter des propriétés de serveur pour la clé personnalisée suivante.
- Clé : Clé personnalisée
- Clé : auth.ldap.connect.timeout
- Valeur : 60000
- Nom d’affichage : auth.ldap.connect.timeout
- Description : Délai d’expiration de la connexion LDAP
auth.ldap.read.timeout
Pour compenser les réponses LDAP lentes, Citrix vous recommande d’ajouter des propriétés de serveur pour la clé personnalisée suivante.
- Clé : Clé personnalisée
- Clé : auth.ldap.read.timeout
- Valeur : 60000
- Nom d’affichage : auth.ldap.read.timeout
- Description : Délai d’expiration de la lecture LDAP
Autres optimisations du serveur
| Propriété du serveur | Paramètre par défaut | Pourquoi modifier ce paramètre ? |
|---|---|---|
| Déploiement en arrière-plan | 1 440 minutes | Fréquence des déploiements de stratégies en arrière-plan, en minutes. S’applique uniquement aux connexions permanentes pour les appareils Android. L’augmentation de la fréquence des déploiements de stratégies réduit la charge du serveur. Le paramètre recommandé est 1440 (24 heures). |
| Inventaire matériel en arrière-plan | 1 440 minutes | Fréquence de l’inventaire matériel en arrière-plan, en minutes. S’applique uniquement aux connexions permanentes pour les appareils Android. L’augmentation de la fréquence de l’inventaire matériel réduit la charge du serveur. Le paramètre recommandé est 1440 (24 heures). |
| Intervalle de vérification des utilisateurs Active Directory supprimés | 15 minutes | Le temps de synchronisation standard pour Active Directory est de 15 minutes. La valeur 0 empêche XenMobile de vérifier les utilisateurs Active Directory supprimés. Le paramètre recommandé est de 15 minutes. |
| MaxNumberOfWorker | 3 | Nombre de threads utilisés lors de l’importation de nombreuses licences d’achat en volume. La valeur par défaut est 3. Si vous avez besoin d’une optimisation supplémentaire, vous pouvez augmenter le nombre de threads. Cependant, avec un plus grand nombre de threads, comme 6, une importation d’achat en volume entraîne une utilisation élevée du processeur. |
Comment vérifier les interblocages dans une base de données SQL et supprimer les données historiques
Lorsque vous constatez des interblocages, exécutez la requête suivante pour les afficher. Ensuite, un administrateur de base de données ou l’équipe Microsoft SQL peut confirmer les informations.
Requête SQL
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-->
Nettoyer la base de données
Important :
Sauvegardez votre base de données avant d’apporter des modifications aux tables.
-
Exécutez la requête suivante pour vérifier les données historiques.
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--> -
Supprimez les données des trois tables précédentes.
Remarque :
Il est possible que vous ne voyiez pas de données historiques dans une table. Si c’est le cas, ne lancez pas la requête de troncation pour cette table particulière.
truncate TABLE dbo.EWDEPLOY_HISTO; truncate TABLE dbo.EWSESS; truncate TABLE dbo.EWAUDIT; <!--NeedCopy--> -
Débloquez les requêtes SELECT qui étaient bloquées en raison d’interblocages. Cette étape permet de gérer les interblocages futurs.
ALTER DATABASE <database_name> SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE <!--NeedCopy--> -
Par défaut, le nettoyage de la base de données est de sept jours pour la conservation des données de session et d’audit, ce qui est élevé pour de nombreux utilisateurs. Modifiez la valeur de nettoyage à 1 ou 2 jours. Dans les propriétés du serveur, apportez la modification suivante :
zdm.dbcleanup.sessionRetentionTimeInDays = 1 day zdm.dbcleanup.deployHistRetentionTimeInDays = 1 day zdm.dbcleanup.auditRetentionTimeInDays=1 day <!--NeedCopy-->
Nettoyer les orphelins dans la table KEYSTORE
Si les nœuds XenMobile présentent de faibles performances, vérifiez si la table KEYSTORE est trop volumineuse. Le serveur XenMobile stocke les certificats d’inscription dans les tables ENROLLMENT_CERTIFICATE et KEYSTORE. Lorsque vous supprimez ou réinscrivez des appareils, les certificats de la table ENROLLMENT_CERTIFICATE sont supprimés. Les entrées de la table KEYSTORE restent, ce qui peut entraîner des problèmes de performances. Effectuez la procédure suivante pour nettoyer les orphelins de la table KEYSTORE.
Important :
Sauvegardez votre base de données avant d’apporter des modifications aux tables.
-
Exécutez la requête suivante pour vérifier les données historiques.
select COUNT(*) from KEYSTORE <!--NeedCopy--> -
Vérifiez les orphelins dans la table KEYSTORE avec la requête suivante.
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--> -
Supprimez les orphelins à l’aide de la requête suivante.
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--> -
Ajoutez un index à la table KEYSTORE pour améliorer l’efficacité de la recherche.
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-->
Dans cet article
- hibernate.c3p0.idle_test_period
- hibernate.c3p0.max_size
- hibernate.c3p0.min_size
- hibernate.c3p0.timeout
- Intervalle de pulsation des services Push
- Taille du pool de connexions APNS MDM iOS
- auth.ldap.connect.timeout
- auth.ldap.read.timeout
- Autres optimisations du serveur
- Comment vérifier les interblocages dans une base de données SQL et supprimer les données historiques