Ajustando as Operações do XenMobile®
O desempenho e a estabilidade das operações do XenMobile envolvem muitas configurações no XenMobile e dependem da sua configuração de banco de dados Citrix ADC e SQL Server. Este artigo foca nas configurações que os administradores mais frequentemente ajustam, relacionadas à otimização do XenMobile. A Citrix recomenda que você avalie cada uma das configurações neste artigo antes de implantar o XenMobile.
Importante:
Estas diretrizes pressupõem que a CPU e a RAM do XenMobile Server são adequadas para o número de dispositivos. Para obter mais informações sobre escalabilidade, consulte Escalabilidade e desempenho.
As seguintes propriedades do servidor se aplicam globalmente a operações, usuários e dispositivos em toda uma instância do XenMobile. Uma alteração em algumas propriedades do servidor exige a reinicialização de cada nó do XenMobile Server. O XenMobile notifica você quando uma reinicialização é necessária.
Estas diretrizes de ajuste se aplicam a ambientes clusterizados e não clusterizados.
hibernate.c3p0.idle_test_period
Esta propriedade do XenMobile Server, uma Chave Personalizada, determina o tempo ocioso em segundos antes que uma conexão seja automaticamente validada. Configure a chave da seguinte forma. O padrão é 30.
- Chave: Chave Personalizada
- Chave: hibernate.c3p0. idle_test_period
- Valor: 120
- Nome de exibição: hibernate.c3p0. idle_test_period
- Descrição: Período de teste ocioso do Hibernate
hibernate.c3p0.max_size
Esta chave personalizada determina o número máximo de conexões que o XenMobile pode abrir para o banco de dados SQL Server. O XenMobile usa o valor que você especifica para esta chave personalizada como um limite superior. As conexões são abertas somente se você precisar delas. Baseie suas configurações na capacidade do seu servidor de banco de dados.
Observe a seguinte equação em uma configuração clusterizada. Sua conexão c3p0 multiplicada pelo número de nós é igual ao seu número máximo real de conexões que o XenMobile pode abrir para o banco de dados SQL Server.
Em configurações clusterizadas e não clusterizadas, definir o valor muito alto com um SQL Server subdimensionado pode causar problemas de recursos no lado do SQL durante o pico de carga. Definir o valor muito baixo significa que você pode não conseguir aproveitar os recursos SQL disponíveis.
Configure a chave da seguinte forma. O padrão é 1000.
- Chave: hibernate.c3p0.max_size
- Valor: 1000
- Nome de exibição: hibernate.c3p0.max_size
- Descrição: Conexões de BD ao SQL
hibernate.c3p0.min_size
Esta Chave Personalizada determina o número mínimo de conexões que o XenMobile abre para o banco de dados SQL Server. Configure a chave da seguinte forma. O padrão é 100.
- Chave: hibernate.c3p0.min_size
- Valor: 100
- Nome de exibição: hibernate.c3p0.min_size
- Descrição: Conexões de BD ao SQL
hibernate.c3p0.timeout
Esta Chave Personalizada determina o tempo limite de ociosidade. Se você usa um failover de cluster de banco de dados, a Citrix recomenda que você adicione esta Chave Personalizada e a configure para reduzir o tempo limite de ociosidade. O padrão é 120.
- Chave: Chave Personalizada
- Chave: hibernate.c3p0.timeout
- Valor: 120
- Nome de exibição: hibernate.c3p0.timeout
- Descrição: Tempo limite de ociosidade do banco de dados
Intervalo de Heartbeat dos Serviços Push
Esta configuração determina com que frequência um dispositivo iOS verifica se uma notificação APNs não foi entregue nesse ínterim. Aumentar a frequência do heartbeat APNs pode otimizar as comunicações do banco de dados. Um valor muito grande pode adicionar carga desnecessária. Esta configuração se aplica apenas ao iOS. O padrão é 20 horas.
Se você tiver muitos dispositivos iOS em seu ambiente, o intervalo do heartbeat pode levar a uma carga maior do que o necessário. Ações de segurança como limpeza seletiva, bloqueio e limpeza completa não dependem deste heartbeat. A razão é que uma notificação APNs é enviada ao dispositivo quando essas ações são executadas.
Este valor governa a rapidez com que uma política é atualizada após alterações na associação de Grupo do Active Directory. Como tal, muitas vezes é adequado aumentar este valor para algo entre 12 e 20 horas para reduzir a carga.
Tamanho do pool de conexão APNS do iOS MDM
Um pool de conexão APNs muito pequeno pode afetar negativamente o desempenho da atividade APNs quando você tem mais de 100 dispositivos. Problemas de desempenho incluem implantação mais lenta de aplicativos e políticas para dispositivos e registro de dispositivos mais lento. O padrão é 1. Recomendamos que você aumente este valor em 1 para cada 400 dispositivos, aproximadamente.
auth.ldap.connect.timeout
Para compensar respostas LDAP lentas, a Citrix recomenda que você adicione propriedades de servidor para a seguinte Chave Personalizada.
- Chave: Chave Personalizada
- Chave: auth.ldap.connect.timeout
- Valor: 60000
- Nome de exibição: auth.ldap.connect.timeout
- Descrição: Tempo limite de conexão LDAP
auth.ldap.read.timeout
Para compensar respostas LDAP lentas, a Citrix recomenda que você adicione propriedades de servidor para a seguinte Chave Personalizada.
- Chave: Chave Personalizada
- Chave: auth.ldap.read.timeout
- Valor: 60000
- Nome de exibição: auth.ldap.read.timeout
- Descrição: Tempo limite de leitura LDAP
Outras Otimizações do Servidor
| Propriedade do Servidor | Configuração Padrão | Por que Alterar Esta Configuração? |
|---|---|---|
| Implantação em Segundo Plano | 1.440 minutos | A frequência para implantações de políticas em segundo plano, em minutos. Aplica-se apenas a conexões sempre ativas para dispositivos Android. Aumentar a frequência das implantações de políticas reduz a carga do servidor. A configuração recomendada é 1440 (24 horas). |
| Inventário de Hardware em Segundo Plano | 1.440 minutos | A frequência para inventário de hardware em segundo plano, em minutos. Aplica-se apenas a conexões sempre ativas para dispositivos Android. Aumentar a frequência do inventário de hardware reduz a carga do servidor. A configuração recomendada é 1440 (24 horas). |
| Intervalo para verificar usuário excluído do Active Directory | 15 minutos | O tempo de sincronização padrão para o Active Directory é de 15 minutos. O valor 0 impede que o XenMobile verifique usuários excluídos do Active Directory. A configuração recomendada é de 15 minutos. |
| MaxNumberOfWorker | 3 | O número de threads usados ao importar muitas licenças de compra por volume. O padrão é 3. Se precisar de otimização adicional, você pode aumentar o número de threads. No entanto, com um número maior de threads, como 6, uma importação de compra por volume resulta em alto uso da CPU. |
Como verificar deadlocks em um BD SQL e excluir dados históricos
Quando você vir deadlocks, execute a seguinte consulta para vê-los. Em seguida, um administrador de banco de dados ou a equipe do Microsoft SQL pode confirmar as informações.
Consulta 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-->
Limpar o banco de dados
Importante:
Faça backup do seu banco de dados antes de fazer alterações nas tabelas.
-
Execute a seguinte consulta para verificar os dados 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--> -
Exclua os dados das três tabelas anteriores.
Nota:
Você pode não ver dados históricos em uma tabela. Se for o caso, ignore a execução da consulta truncate para aquela tabela específica.
truncate TABLE dbo.EWDEPLOY_HISTO; truncate TABLE dbo.EWSESS; truncate TABLE dbo.EWAUDIT; <!--NeedCopy--> -
Desbloqueie as consultas SELECT que foram bloqueadas devido a deadlocks. Esta etapa cuida de deadlocks futuros.
ALTER DATABASE <database_name> SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE <!--NeedCopy--> -
Por padrão, a limpeza do banco de dados é de sete dias para reter dados de retenção de sessão e retenção de auditoria, o que é alto para muitos usuários. Altere o valor de limpeza para 1 ou 2 dias. Nas propriedades do servidor, faça a seguinte alteração:
zdm.dbcleanup.sessionRetentionTimeInDays = 1 day zdm.dbcleanup.deployHistRetentionTimeInDays = 1 day zdm.dbcleanup.auditRetentionTimeInDays=1 day <!--NeedCopy-->
Limpar órfãos na tabela KEYSTORE
Se os nós do XenMobile apresentarem baixo desempenho, verifique se a tabela KEYSTORE está muito grande. O XenMobile Server armazena certificados de registro nas tabelas ENROLLMENT_CERTIFICATE e KEYSTORE. Quando você exclui ou registra novamente dispositivos, os certificados na tabela ENROLLMENT_CERTIFICATE são excluídos. As entradas na tabela KEYSTORE permanecem, o que pode causar problemas de desempenho. Execute o seguinte procedimento para limpar os órfãos da tabela KEYSTORE.
Importante:
Faça backup do seu banco de dados antes de fazer alterações nas tabelas.
-
Execute a seguinte consulta para verificar os dados históricos.
select COUNT(*) from KEYSTORE <!--NeedCopy--> -
Verifique se há órfãos na tabela KEYSTORE com a seguinte 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--> -
Limpe os órfãos usando a seguinte 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--> -
Adicione um índice à tabela KEYSTORE para melhorar a eficiência da pesquisa.
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-->
Neste artigo
- hibernate.c3p0.idle_test_period
- hibernate.c3p0.max_size
- hibernate.c3p0.min_size
- hibernate.c3p0.timeout
- Intervalo de Heartbeat dos Serviços Push
- Tamanho do pool de conexão APNS do iOS MDM
- auth.ldap.connect.timeout
- auth.ldap.read.timeout
- Outras Otimizações do Servidor
- Como verificar deadlocks em um BD SQL e excluir dados históricos