lundi 12 février 2024

Tracer l'activité des développeurs sur la production

Hélas, on a laissé jouer les développeurs sur la base de production !

Question posée : par quel moyen surveiller leurs actions ?

Dans cet article, on utilise la fonction d'audit de SQL Server pour capturer toutes leurs requêtes.

Lire la suite...

mardi 31 octobre 2023

SSMSInfoReports : nouvelle release v9

Une nouvelle release de mes rapports custom pour SQL Server Management Studio, la v9 !

Enormément d'améliorations partout dans cette release et en prime un rapport supplémentaire sur les locks et deadlocks, ce qui porte maintenant le nombre de rapports à 17.

Pour ceux qui ne les connaîtraient pas déjà, cet ensemble de rapports chaînés vous permettent d'avoir un aperçu rapide et graphique d'une instance et de ses bases de données, sous tous ses aspects : configurations, erreurs, stockage, backups, jobs, sécurité, performances... Et tout cela sans devoir passer par des dizaines de requêtes ou boîtes de dialogue. Un sacré gain de temps !

Côté pratique, ils se lancent directement dans SSMS et peuvent être exportés (pdf) voire imprimés... je m'en sers tous les jours ! (pour l'anecdote, j'ai appris que des consultants Microsoft les utilisent et les déploient chez leur clients...)

Vous pouvez les télécharger sur https://github.com/datafly/ssmsinforeports

La v9 est publiée comme il se doit dans la section "Releases"

Lire la suite...

vendredi 13 octobre 2023

Conférence Datafrogs 14 octobre 2023

Samedi 14 octobre à 14h45, j'aurai le plaisir de présenter une sessions sur les "Query Hints" ou "Indicateurs de requête".

L’optimiseur de SQL Server décide du meilleur plan d’exécution et il s’en débrouille plutôt bien. Mais comment faire pour lui forcer la main si on est sûr de pouvoir faire mieux que lui ?

Dans cette session, je vous montrerai les différents indicateurs de requêtes et leurs effets.

Le lien (linkedin) vers l'évênement : https://lnkd.in/gZZRT7zK

samedi 8 juillet 2023

N'oubliez pas les correctifs

On ne le dira jamais assez, il faut installer les correctifs sur vos instances SQL Server.

Microsoft a enfin mis en ligne une page tenue à jour qui recense les correctifs pour toutes les versions de SQL Server, de la version 6.5 (hé oui !) à la version 2022.

Mais bien sûr, si vous utilisez SQL Server 2012 (fin du support étendu le 12 juillet 2023, on y est) ou une version encore plus ancienne, envisagez à court terme la mise à jour vers une version encore supportée par Microsoft.

Pour installer un correctif, pour ma part, j'attends en général une quinzaine de jours avant de l'appliquer, histoire d'éviter des régressions imprévues (il y a même eu des retraits de correctifs en catastrophe dans le passé, quelques jours après leur sortie).

En ce qui concerne SQL Server 2022 par exemple, le correctif Cumulative Update 4 avait quelques bugs qui pourraient se révéler gênants.

En voilà un, heureusement corrigé depuis par le Cumulative Update 5 :

-- Créons une table avec un  index descendant
DECLARE @T table (i integer NOT NULL INDEX ii (i DESC));
INSERT @T (i) VALUES (1), (2), (3);

-- Cette requête renvoie les données en ordre descendant !
SELECT Ascending = T.i
FROM @T AS T
WHERE T.i IN (1, 2, 3)
ORDER BY T.i ASC; -- Mais nous avions demandé un ordre ascendant

-- Cette requête renvoie les données en ordre ascendant !
SELECT Descending = T.i
FROM @T AS T
WHERE T.i IN (1, 2, 3)
ORDER BY T.i DESC; -- Mais nous avions demandé un ordre descendant

-- CU 4 : L'ordre est incorrect avec un index descendant et un prédicat IN sur cette clé

 

samedi 18 mars 2023

Datafrogs Conférence : Recherche Full-Text

Vous trouverez ici les diapositives et les démonstration de notre session sur la recherche en texte intégral lors de la conférence Datafrogs de ce 18 mars 2023.

Slides de la présentation

Démonstrations

 

jeudi 2 mars 2023

Les index filtrés

Depuis SQL Server 2008, il est possible de créer des index filtrés : des index nonclustered avec un prédicat WHERE, qui ne vont indexer qu'une partie de la table.

Bien que peu utilisés (je le constate souvent dans les bases que j'examine), l'utilisation des index filtrés peut nous aider à résoudre certaines problématiques de performances et peuvent réduire le volume de stockage.

Il faut cependant bien comprendre quelles sont les limites à leur utilisation : dans beaucoup de cas, les index filtrés que j'ai rencontré étaient mal utilisés !

Lire la suite...

lundi 27 février 2023

SQL Server 2022 : Database Ledger

Un petit webcast sur Database Ledger, nouvelle fonctionnalité de sécurité de SQL Server 2022. Basé sur la technologie de la blockchain, cela permet d'assurer la traçabilité des modifications et de garantir l'intégrité des données, pour des bases de données à haute sécurité. Dans la démo, j'ai joué au vilain pirate pour altérer ma base de données...

jeudi 23 février 2023

SQL Server 2022 : bug Filestream

En construisant mes démos, je suis tombé sur ce bug : lorsqu'on tente d'ajouter un filegroup filestream à une base de données, on obtient le message d'erreur suivant.

Msg 35221, Level 16, State 1, Line 2

Could not process the operation. Always On Availability Groups replica manager is disabled on this instance of SQL Server. Enable Always On Availability Groups, by using the SQL Server Configuration Manager. Then, restart the SQL Server service, and retry the currently operation. For information about how to enable and disable Always On Availability Groups, see SQL Server Books Online.

Cela n'a bien entendu aucun rapport avec Always On...

Ce problème (entre autres) est corrigé avec le Cumulative Update #1, qu'il est donc urgent de télécharger ici.

 

 

mercredi 8 février 2023

Question : Random values

Question : Aurais-tu une technique pour qu’au sein d’un SELECT, la fonction Rand() change de valeur sur chaque ligne ? Car malheureusement, elle garde la même valeur sur chaque ligne...

Réponse : effectivement, pour un UPDATE SET col = RAND(), la fonction n'est effectuée qu'une seule fois et la valeur sera la même pour toutes les lignes. Mais il existe une solution, avec la création d'une vue et d'une fonction, qui forcera la fonction à s'exécuter pour chaque ligne.
 

-- Création d'une vue
CREATE VIEW [dbo].[V_RAND] AS
SELECT RAND() AS RAND  
GO
-- Création d'une fonction
CREATE FUNCTION [dbo].[F_GET_RAND] ()
    RETURNS FLOAT
    AS
    BEGIN
      RETURN (SELECT RAND FROM V_RAND)
    END;
GO

UPDATE MATABLE SET MACOLONNEFLOAT = dbo.F_GET_RAND()

 

dimanche 20 novembre 2022

Installations rapides

Si comme moi vous déployez fréquemment des instances SQL Server pour des tests divers et que vous êtes pressé, le plus rapide est de le faire avec un fichier de configuration.

Dans cet article, un exemple de fichier de configuration compact pour une installation simple de SQL Server 2022.

Lire la suite...

- page 1 de 18