Serveur XenMobile®

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.

  1. 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-->
    
  2. 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-->
    
  3. 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-->
    
  4. 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.

  1. Exécutez la requête suivante pour vérifier les données historiques.

    select COUNT(*) from KEYSTORE
    <!--NeedCopy-->
    
  2. 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-->
    
  3. 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-->
    
  4. 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-->