Voici des petites choses que tu peux regarder et tester. C'est une liste que j'ai trié pour toi mais c'est très bref et à ne pas suivre à la lettre, c'est en fonction. Mais ça te fait gagner du temps sur le livre de Frédéric. Attention, je n'applique pas tout, c'est en fonction des besoins.
- Avoir le dernier Service Pack d’installé et le CU aussi
- Bien dimensionner ses DB
- Mettre l’autogrowth en MB
- Vérifier que des DB en FULL ait bien un backup du log, si pas, alors pourquoi être en full ?
- Hyper-threading, on peut l'activer au niveau du bios
- Il faut aussi activer l'Intel turbo boost
- Il ne faut pas mixer des générations de disque (512 et 4K par exemple). Si c'est le cas, ça peut poser des problèmes entre autres avec Always On, même s'il y a des traces flag pour ça.
- Dans Windows Server 2008 et +, le réglage d'économie d'énergie par défaut est réglé sur Balanced, ce qui signifie que les composants tels que le processeur et le stockage seront réduit si le système n’est pas occupé. Dans certains cas, cela peut entraîner une dégradation des performances de SQL Server.
- Il faut désactiver l'option qui est à cocher (properties), pour l'indexation des disques stockant des fichiers SQL.
- Redimensionner correctement les DB system, surtout la db Model
- Faire plusieurs fichiers Data pour la TempDB (1 par core), et si on a encore de la contention, on peut en mettre plus, autant que besoin. On peut même en avoir 64…
- Ne pas avoir la TempDB sur le C, et idéalement aucune DB system sur le C
- Ne pas avoir l’option auto_shrink et auto_close d’activées
- Auto create Statistics & update Statistics doivent être à True sauf pour Sharepoint
- Les statistics doivent bien être à jour, plus important que les indexes même
- Configurer la mémoire pour ne pas tout donner à SQL Server
Exemple :
De 4 à 8 GB de mémoire sur le serveur, on garde 2 GB pour l'OS
De 8 à 32 GB de mémoire sur le serveur, on garde 3 GB pour l'OS
De 32 à 128 GB de mémoire sur le serveur, on garde 4 GB pour l'OS
De 128 à 512 GB de mémoire sur le serveur, on garde 6 GB pour l'OS
De 512 à 4096 GB de mémoire sur le serveur, on garde 8 GB pour l'OS
- Désactiver l'annotation 8.3, qui est l'annotation qui existe depuis Windows 3.11 (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameCreation et mettre à 1)
- Désactiver l'option d'ouverture du server manager (Server manager/manage/Server manager Properties), cela ne s'ouvre que quand on se connecte sur le serveur, mais ça utilise un peu de ressource inutilement
- Activer la compression des backups, il n'y a aucune raison de ne pas le faire si on fait ses backups avec SQL Server. Attention, à voir si cela ne peut pas faire de conflit avec une autre application qui s’occuperait des backup.
- Optimize for adhoc workload, une requête est compilée puis mise dans le plan d'exécution, cela est stocké et gardé. Si on ne l'utilise plus jamais, il va la garder et prendre de la place. En activant cette option, on en libère. Ce n’est pas intéressant si on a plusieurs fois les mêmes query. Pour le tester, utiliser la query ici :
https://www.sqlskills.com/blogs/kimb...hoc-workloads/ et première query ici :
https://dba.stackexchange.com/questi...-hoc-workloads ou dans mon fichier «Optimize for adhoc workload »
- Network packet size : voir pour augmenter sa valeur
https://docs.microsoft.com/en-us/sql...uration-option
- Seuil de parallélisme (Cost Threshold for Parallelism), voir pour monter la valeur à 25, 30 ou 35
https://www.brentozar.com/archive/20...t-be-set-to-5/
- Maxdop : à voir en fonction du nombre de cœur, mais ne pas dépasser 8
- Il faut idéalement avoir 20% d'espace libre dans les fichiers SQL (mais pour les gros fichiers, c'est plus compliqué)
- Il faut avoir le minimum de VLF
- Delayed durablity: La transaction n'est pas écrite directement dans le log, donc ça améliore les performances. Mais par contre, si on a un crash juste avant qu'il écrive, on perd la transaction et donc la donnée. (N’existe pas en 2008)
https://docs.microsoft.com/en-us/sql...ion-durability
https://blog.sqlauthority.com/2014/0...l-server-2014/
https://docs.microsoft.com/en-us/sql...ql-server-2017
https://www.brentozar.com/archive/20...e-flag-appears
https://blogs.msdn.microsoft.com/sql...-updates-oh-my
http://www.sqlservercentral.com/arti...ce-flag/152989
https://www.brentozar.com/archive/20...ath-trace-flag
https://www.brentozar.com/blitz/trac...bled-globally/
- Trace flag 1117 so when a single file in a database filegroup needs to grow, they all grow together
Note: Starting with SQL Server 2016 (13.x) this behavior is controlled by the AUTOGROW_SINGLE_FILE and AUTOGROW_ALL_FILES option of ALTER DATABASE, and trace flag 1117 has no effect. For more information, see ALTER DATABASE File and Filegroup Options (Transact-SQL).
Est par défaut depuis SQL 2016 pour la TempDB donc inutile de l'activer. Et donc ne se fait plus sur les users DB, donc si on veut l'activer pour les users DB, il faut mettre ceci : ALTER DATABASE AdventureWorks MODIFY FILEGROUP [PRIMARY] AUTOGROW_ALL_FILES;
- Trace flag 1118 to reduce SGAM contention
Note: Starting with SQL Server 2016 (13.x) this behavior is controlled by the SET MIXED_PAGE_ALLOCATION option of ALTER DATABASE, and trace flag 1118 has no effect. For more information, see ALTER DATABASE SET Options (Transact-SQL).
A voir à ne pas le généraliser, voir ici :
https://www.developpez.net/forums/d1...hiers-donnees/
Est par défaut depuis SQL 2016 pour la TempDB donc inutile de l'activer. Si on veut l'activer pour les users DB, il faut mettre ceci : ALTER DATABASE <dbname> SET MIXED_PAGE_ALLOCATION { ON | OFF }
- Trace flag 2371 so statistics are recomputed less rarely as tables grow larger
-> très important d'après Christophe Laporte
Note: Starting with SQL Server 2016 (13.x) and under the database compatibility level 130, this behavior is controlled by the engine and trace flag 2371 has no effect.
- Trace flag 3023 Enables CHECKSUM option as default for BACKUP command.
Note: Starting with SQL Server 2014 (12.x) this behavior is controlled by setting the backup checksum default configuration option.Sur les scripts d'OLA, on peut choisir de le faire donc pas besoin que le TF soit activé dans la configuration.
https://blog.developpez.com/elsuket/...um_compression
- Trace Flag 3226 By default, every successful backup operation adds an entry in the SQL Server error log and in the system event log. If you create very frequent log backups, these success messages accumulate quickly, resulting in huge error logs in which finding other messages is problematic.
- Trace flag 3427 Enables fix for issue when many consecutive transactions inserting data into temp table in SQL Server 2016 (13.x) or SQL Server 2017 (14.x) consumes more CPU than in SQL Server 2014 (12.x). -> Remplace TF1118 depuis SQL2016
Note: This trace flag applies to SQL Server 2016 (13.x) SP1 CU2 and higher builds. Starting with SQL Server 2017 (14.x) CU4 this trace flag has no effect.
- Trace flag 4199 to get new query optimizer hotfixes that produce different query plans
https://dba.stackexchange.com/questi...nable-globally
- Trace flag 8048 enables SOFT NUMA when SQL’s NUMA-awareness code doesn’t work on larger systems
Note: Starting with SQL Server 2014 (12.x) SP2 and SQL Server 2016 (13.x) this behavior is controlled by the engine and trace flag 8048 has no effect.
Tu peux aussi utiliser les scripts de Brent Ozar (SP_Blitz par exemple) pour te montrer ce qui ne va pas sur ton instance.
Partager