Optmised SQL Server Database Settings

Voilà différents scripts pour mettre en place les valeurs les plus optimisées possibles

Script d’optimisation au niveau de la base, Ce script est à exécuter sur chacune des bases

https://github.com/alexiscomte/SQL/blob/master/OPTIMIZE_DB.sql

Ce second script est valable pour l’ensemble des bases sur la même instance

https://github.com/alexiscomte/SQL/blob/master/OPTIMIZE_SRV.sql

Le script suivant mettra à jour les Traces les plus adaptées

https://github.com/alexiscomte/SQL/blob/master/OPTIMISE_TRACE.sql

Le script suivant va vérifier le niveau de compatibilité de la base et le comparer avec celui du serveur.

https://github.com/alexiscomte/SQL/blob/master/OPTIMIZE_COMPATIBILITY_LEVEL.sql

En supprimant la condition « name = DBNAME() » dans ce script, on peut faire l’opération sur l’ensemble des bases d’une instance. Attention pour ce dernier script, changer le mode de compatibilité peut changer les plans d’exécution des requêtes et donc il est possible que certaines requêtes soient ralenties. Autre effet de bord, certaines fonctions peuvent devenir obsolètes d’une version à une autre de SQL Server, il conviendra de vérifier les effets de bord.

Source :

https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql-compatibility-level?view=sql-server-2017#differences-between-compatibility-level-130-and-level-140

Encodage des Fichiers SQL

Attention à l’encodage des fichiers « .sql » , notamment s’ils sont ensuite exécutés par SqlCmd, un mauvais encodage peut avoir pour effet de faire perdre des informations sur les caractères accentués.

Voilà ci dessous un exemple avec deux fichiers, l’un encodé en UTF8 et l’autre en UTF8-BOM

https://github.com/alexiscomte/SQL/blob/master/testUTF8BOM.sql

https://github.com/alexiscomte/SQL/blob/master/testUTF8.sql

Lorsqu’on les exécute avec SQLCMD, ce dernier les convertit en UTF16 et cette conversion se passe mal lorsque le format est UTF8 et pas UTF8-BOM.

Exemple :

sqlcmd -S SQLSRV  -i test.sql -d MaBase 
sqlcmd -S SQLSRV  -i testWITHBOM.sql -d Mabase

UNION & UNION ALL

UNION va se comporter comme un DISTINCT UNION ALL va conserver les enregistrements des différents select.

Exemple : 

declare @t1 table ( ids  varchar(50) )
declare @t2 table ( ids  varchar(50) )
insert into @t1 ( ids ) values ('tutu')
insert into @t1 ( ids ) values ('tutu')
insert into @t1 ( ids ) values ('toto')
insert into @t2 ( ids ) values ('toto')
insert into @t2 ( ids ) values ('toto')
insert into @t2 ( ids ) values ('tutu')
select ids from @t1 union select ids from @t2 
select ids from @t1 union all select ids from @t2