Christophe's profileChris @ Work - DBA SQLSe...PhotosBlogLists Tools Help

Blog


    November 24

    Enregistrement détaillé de l’exécution d’un package SSIS : DTLoggedExec

    Voici un utilitaire fort utile à qui veut surveiller de manière assez précise l’exécution d’un lot SSIS.

    Un petit copier-coller des fonctionnalités sur son site web : http://dtloggedexec.davidemauri.it/default.aspx?AspxAutoDetectCookieSupport=1

    Package-DataFlow-Performance-Over-Time Quality-Of-Service-Small

    DTLoggedExec has a lot of interesing functionalities:

    • Enable / Disable logging on the fly for any package, just right from the command line
    • Log Variables value
    • Log Values of Properties bound to Expressions
    • In case of error, log all properties along with related connection properties of the erroneous task. This is IDEAL for post-mortem debugging
    • Fully pluggable architecture: decide where to log informations (natively supported: No Log, Console, CSV) Add your own log providers to customize logging
    • Choose which event you want to log
    • DTExec parameters emulation (not yet 100% finished)
    • Compiled to support 32bit and 64bit platforms (32bit and 64bit executables are available in the zipped file)
    • Support for Integration Services 2005 or 2008 through assembly binding
    • DataFlow Profiling: log DataFlow performance data, how many rows each component has processed in how much time
    • Log to CSV
    • Import Log and Profiling Data into SQL Server for further analysis automatically
    • Add parameters support to packages

    Cet package a été mis au point par Davide MAURI, MVP SQL Server.

    November 22

    Type Money : l’argent ne fait pas le bonheur

    Au cours des différentes interventions que je suis amenées à faire en tant que consultant, il m’arrive de jeter un œil sur le design de la base de donnée. Histoire de contrôler que les types de données sont bien choisis (pourquoi utiliser un type integer sur 4 octets alors que la valeur maximale ne dépasse pas 10 … et où 1 seul octet aurait suffi). Ok, cela ne fait pas tout, mais reporté sur quelques millions d’enregistrements, sur plusieurs champs, dans plusieurs tables, les performances globales peuvent en souffrir. Et si ce fameux champ est indexé (clé étrangère par exemple), vous détériorez fortement les performances de votre index car au lieu de placer 8060 valeurs (au maximum on oublie la notion de fill factor et de pad_index pour une fois) de 1 octet, vous n’avez plus que 2015 enregistrements dans vos pages de données. Donc des lectures disques supplémentaires pour de simples recherches.

    Bref, le choix des types de données est crucial.

    Au-delà de ces considérations, il m’arrive de rencontrer le type Money. Autant vous dire que je ne suis pas fan du tout :

    image

    Hum hum, on dirait que l’on est tronqué à 4 chiffres après la virgule … Ce que nous confirme la doc en ligne :

    image

    En décimal, nous avons :

    image

    Quel est l’effet de bord de cette troncature ? Démo :

    image

    Oups la boulette, 500 ne serait pas égal à 500 ???? On m’aurait menti ? Vérification :

    image

    Ouf, l’univers de la finance aurait pu voler en éclat avec une telle démonstration et l’économie mondiale s’effondrer... A moins que ce soit déjà fait depuis 1 an … :-)

    L’argent ne fait pas le bonheur, c’est bien connu, le type money pourrait faire votre malheur suivant ce que vous lui demandez ! Réfléchissez bien avant de l’utiliser et en cas de doutes, préférez lui un bon vieux type décimal …

    November 21

    SSIS : Microsoft Connectors for Oracle and Teradata by Attunity

    Il devient à présent inutile de présenter l’outil d’ETL (Extraction, Transformation & Loading) de Microsoft. Dans SQL Server 2000, les lots DTS (Data Transformation Services) permettraient déjà un certain nombre de manipulations de donnée au travers d’une interface graphique relativement simple et intuitive.

    Depuis SQL Server 2005, DTS a laissé sa place à SSIS (SQL Server Integration Services), pour notre grand bonheur il faut l’avouer. SSIS est bien plus puissant, bien plus performant que son ancêtre.

    Cela s’apparente à un véritable “langage” de programmation, même si c’est un peu exagéré de dire cela. La possibilité de créer des boucles, des conditions, des variables au niveau du control flow, finalement la “structure” de notre programme, et des manipulations de données au sein du data flow. On peut aussi réagir à des évènements grâce aux events handlers (par exemple une gestion d’erreur …).

    Le dataflow va, dans la quasi-totalité des cas, contenir une source de donnée, une ou plusieurs transformations et une destination.

    Bref, venons-en au fait.

    Il est possible de travailler avec n’importe quelle source et destination de donnée à partir du moment où il existe un driver permettant d’y accéder. Bien entendu les produits Microsoft (SQL Server, Excel, Access – attention toutefois aux problèmes 32/64 bits ….) sont présents mais il est possible d’accéder à des fichiers texte, des bases Oracle, DB2, Teradata et tout ce qu’ODBC/OLEDB vous autorise.

    Un petit billet aujourd’hui pour parler spécifiquement des drivers Oracle et Teradata fournis par Attunity, téléchargeable chez Microsoft ici.

    Ces drivers permettent de gains de performances spectaculaires sur l’import ou l’export de données vers ces plateformes. Cela fonctionne aussi en 64 bits … Pas de raisons donc de s’en priver !

    November 11

    VHD Attach

    Si vous travaillez fréquemment avec Virtuel PC sur Windows 7 ou bien avec Hyper-V, vous avez probablement presté contre le fait de ne pas pouvoir accéder plus facilement au contenu d’un fichier VHD.

    En effet il fallait aller dans le gestionnaire de disques pour attacher le VHD. Un peu long !

    Un petit logiciel, dans sa version 1.0 permet de gagner du temps : VHD Attach.

    Un simple click droit sur le fichier et un menu contextuel vous facilite la vie …

    Screenshot

    DBA Online vous propose un DBA virtuel pour administrer à distance SQL Server

    Séance auto-promotion et publicité …

    DBA Online (www.dba-online.fr) vous propose une solution de DBA virtuel pour administrer à distance vos serveurs SQL.

    TPE/PME/PMI qui ne voulez pas investir dans un architecte système et bases de données à plein temps, cette solution vous permet de bénéficier des services de personnes qualifiées et certifiées qui vont surveiller votre système, les performances globales, les tâches planifiés, etc ...

    October 18

    SQL Server Integration Services : installation de SSIS en 32 bits ou 64 bits …

    En tant que consultant / formateur spécialisé sur SQL Server (design de base de donnée, migrations, SSIS, optimisation de performances, SSAS, mise en place de solution à haute disponibilité), je suis assez fréquemment questionné sur le sujet. Dois-je installer mon serveur SQL en 32 bits ou bien en 64 bits ?

    Une chose est sure, si vous traitez de très gros volumes, la version 64 bits s’impose, sinon, l’exécution du package sera limité à 2 Gb de mémoire, à moins que vous fassiez appel à un sous package plus générique auquel vous passez des paramètres. Si vous n’avez à traiter que des bases SQL Server, le choix du 64Bits est le bon, par contre, si vous devez traiter des sources de données (ou de destinations) de type Microsoft Access ou Microsoft Excel, voire des sources de données Oracle, il va falloir peser le pour et le contre, car les drivers pour les produits office sont en 32 bits seulement (pour le moment, nous verrons bien ce qui sera proposé avec la version 64 bits de Office 14). Il est possible sur un environnement 64 bits d’exécuter un package en mode 32bits (DTEXEC /x86 ….), mais cela ne règle pas 100% des problèmes. On peut aussi installer le BI Studio sur un serveur, mais cela n’est pas possible sur les versions IA64 … Pour Oracle, il faut faire quelques manipulations complémentaires, principalement du au fait que la variable d’environnement PATH prend en compte d’abord la version 32 bits et ensuite la version 64 bits… Bref le sujet n’est pas si simple. Voici quelques articles traitant du sujet :

    Sur le site Microsoft : 64-bit Considerations for Integration Services

    Un très bon résumé de cet article à lire sur le site de Douglas Laudenschlager.

    Deux autres liens :

    Alors, quelle version choisissez vous ?

    Et si vous avez besoin de grosses performances lors du chargement de données, un excellent article SQLCat à lire : The Data Loading Performance Guide.

    SQL Heartbeat

    Pour les DBA en manque de belles applications de monitoring de Bases de données, vous pouvez utiliser l’activity monitor apparu dans SQL Server Management Studio 2008 (SSMS 2008).

    D’autres solutions existent, peut être pour des besoins différents.

    • SQL Mim de Sébastien Pertus à qui j’ai suggéré quelques fonctionnalités (et de revoir certains écrans pour des bases ayant un grand nombre de filegroups …):
      SQL_MiM_FragIndexes1_74933773 
    • SQL HeartBeat que j’ai découvert en m’amusant avec OLAP HeartBeat
      WaitsBig  RWSmall SeekSmall
      Il permet de suivre de monitorer les waits, l’activité disque, le cache Hit Ratio, d’afficher les locks et deadlocks.

    Ces outils gratuits ne nécessitant pas d’installation d’agents, vous pouvez les tester à loisir …

    OLAP HeartBeat

    Lorsque vous avez un serveur Microsoft SSAS (SQL Server Analysis Services) en production, mis à part l’utilisation d’un bon vieux perfmon, il n’existe pas grand chose pour visualiser l’activité d’une instance, mis a part bien sur le profiler. Microsoft aurait été bien inspiré d’ajouter un “Activity Monitor” à SSMS (SQL Server Management Studio) pour une instance SSAS comme cela a été fait pour la base relationnelle dans la version 2008.

    Une recherche sur internet m’a rapidement conduit sur SQLSolutions qui propose une produit gratuit : OLAP HeartBeat.

    Je ne saurais que trop vous conseiller de tester ce produit bien sympathique qui renvoie des informations bien utiles telles que :

    • les sessions,
    • les dernières commandes passées,
    • les temps CPU par session et par application,
    • les read/writes
    • des statistiques sur le cache

    image1

    image2

    Si à cela vous ajoutez les fichiers logs que l’on réinjecte dans le designer d’agrégations afin d’en améliorer les performances, nul doute que votre solution SSAS sera performante …

    BIDS Helper

    September 21

    Data Profile Viewer

    Après quelques jours au calme sur le plage de Palombaggia, le retour aux affaires est dur, très dur. Mais ayant épinglé dans mon menu Démarrer SQL Server Management Studio et BI Studio, ces deux icones me rappellent ce que je dois faire …

    Et c’est bien là que les ennuis commencent … Non pas de devoir travailler (quoi que …) mais surtout de la facilité offerte par Windows 7 pour épingler une application dans la barre des tâches ou bien dans le menu Démarrer. Du coup, par fainéantise par soucis d’efficacité et de productivité (!!!!), j’exécute mes applications fréquemment utilisées par ce biais là. Au risque de passer à côté de nouveautés …. Voilà, on y vient, mes habitudes de travail et ces raccourcis m’ont fait passer à côté du Data Profile Viewer (dans le sous-menu SSIS).

    Késako ? Bon, soyons fous. Je démarre cette application. Hum, pas très fun au premier abord …

    image

    Je pense que j’aurais été capable de produire une telle interface, bien austère … Un petit click sur le bouton aide m’en apprendra plus …

    image

    Effectivement, j’avais bien repéré cette fameuse tâche Data Profiling Task, sans vraiment y prêter attention car je n’en n’avais jamais eu l’utilité.

    image

    OK, reste plus qu’a tester, puisque l’aide nous promet des choses sympathiques sur le profiling des données.
    Je créé donc un nouveau package SSIS et j’ajoute ma tâche de Data profiling. J’ajoute une connexion à une BD de test (AdventureWorksDW2008 dans ce cas précis) et une connexion pour un fichier XML en sortie.

    Je vais ensuite choisir ce que je veux comme type d’analyse. Il est possible d’ajouter plusieurs analyses dans une seule tâche.
      - Je voudrais avoir une idée de la longueur des noms de famille des employés
      - Je voudrais avoir quelques chiffres clé sur les ventes
      - Je voudrais savoir quels sont les produits qui n’ont pas de prix revendeur

    Bon, certes, des exemples pas forcément utilisables dans la vrai vie, mais je vous laisse libre d’adapter à vos besoins … Ce qui nous donne une tâche de profiling avec 3 type de requêtes.

    image

    Go go go. On exécute le package SSIS et on obtient un fichier XML. Cette fois ci, le Data Profile Viewer devient plus fun, vraiment plus fun …

    image

    Et si l’on cliques sur chaque profil ça devient très intéressant :

    La longueur des Noms de famille (j’ai aussi cliqué sur une ligne de statistique et le logiciel a fait un drill down, tout comme cela se fait lorsque l’on parcours un Cube OLAP dans SSMS, pour afficher les enregistrements correspondants

    image

    Les produits n’ayant pas de prix revendeur (près de 30%)

    image

    Les statistiques sur mes ventes … prix minimum, maximum et médian …

    image

     

    Au final, le Data Profile Viewer est une application strictement cliente seulement vouée à présenter les données produites par la tâche SSIS de profiling des données. Elle le fait de manière correcte, mais on ne trouve aucune option pour exporter les données afin de les intégrer dans les produits de la gamme Office. Mais elle a le mérite d’exister et surtout elle donne envie d’utiliser la tâche SSIS de profiling de données pour extraire de l’information de votre masse de données relationnelles ...

    August 31

    Tâches hebdomadaire du DBA : Fragmentation des index

    Après un premier billet au sujet d’une des tâches quotidienne du DBA au sujet de l’espace libre dans une base de donnée voici le post inaugural des tâches hebdomadaire : la fragmentation des index …

    Vos chers amis développeurs ont probablement pensé à mettre des index sur les champs appropriés (clés étrangères, champs pour des conditions where, order by et autre Joins …) et ne manquent pas de vous rappeler qu’ils ont fait leur part de travail…

    Et vous chers confrères DBA, avez-vous l’esprit tranquille ? Yes, of course, vous avez planifié des réorganisation d’index et des reconstructions d’index à intervalles réguliers. J’en suis sûr. Mais il ne sert à rien non plus de réindexer tous les jours, ni même toutes les semaines. Tout dépend de l’activité de votre base de données.

    Et oui, un index est un être vivant génétiquement non modifié qui évolue dans le temps. Au fur et à mesure, les opérations INSERT, UPDATE, DELETE vont mettre à mal le beau classement de votre index. Index cluster ou index non cluster, même combat, à quelques particularités près. On va se retrouver avec des emplacements libres dans nos chères pages d’index, quelques pages splits sont intervenus … Bref, est-ce que mon index ressemble à un vrai morceau de gruyère et a besoin d’une cure de jouvence ou bien peut-on se satisfaire de sa condition actuelle et repousser à plus tard l’opération de maintenance.

    Car c’est bien là que se situe de nerf de la guerre. L’index est fort utile afin d’accélérer bon nombre de requêtes, mais lorsque l’on veut intervenir dessus, l’impact en terme de performance sur le serveur est vraiment non négligeable. Sans compter avec les verrous posés pour sa reconstruction … Même si de gros progrès ont été fait avec l’option ONLINE sur la version Enterprise de SQL Server, cela reste néanmoins assez pénalisant.

    La question est donc : dois-je réindexer maintenant ?
    Pour ma part, je me suis construit une petite requête TSQL qui comme d’habitude satisfait à mon besoin. Libre à vous de l’amender comme bon vous semble.

    WITH ReallyUsedIndexes AS
    (
        SELECT top 100 i.id,i.name,i.indid,CAST((8* i.reserved)/1024 AS VARCHAR) + ' Mo' AS Taille,i.rows,
              [user_seeks] ,[user_scans] ,[last_user_seek] ,[last_user_scan]
        FROM sysindexes i
        INNER JOIN sys.dm_db_index_usage_stats ius ON i.id = ius.object_id AND i.indid = ius.index_id
        WHERE i.dpages > 0 AND
              ( ius.user_seeks > 2 OR
                ius.user_scans > 2 )
        ORDER BY i.dpages DESC
    )
    SELECT
           OBJECT_SCHEMA_NAME(SDDIPS.[object_id]) + '.' + OBJECT_NAME(SDDIPS.[object_id]) AS [object_name],
           SI.[name] AS index_name,
           SDDIPS.[index_type_desc], SDDIPS.[avg_fragmentation_in_percent],
           ReallyUsedIndexes.Taille, ReallyUsedIndexes.rows,
           ReallyUsedIndexes.[user_seeks] ,ReallyUsedIndexes.[user_scans] ,
           ReallyUsedIndexes.[last_user_seek] ,ReallyUsedIndexes.[last_user_scan],
           'ALTER INDEX ' + SI.[name] + ' ON ' + OBJECT_SCHEMA_NAME(SDDIPS.[object_id]) + '.' + OBJECT_NAME(SDDIPS.[object_id]) + ' REBUILD WITH (ONLINE =  ON) ' as Alter_Index
        FROM sys.[dm_db_index_physical_stats](DB_ID(), NULL, NULL, NULL, 'Detailed') SDDIPS
           INNER JOIN sys.[indexes] SI ON SDDIPS.[object_id] = SI.[object_id]AND SDDIPS.[index_id] = SI.[index_id]
           INNER JOIN ReallyUsedIndexes ON ReallyUsedIndexes.id = SI.[object_id]AND ReallyUsedIndexes.indid = SI.[index_id]
        WHERE SDDIPS.[avg_fragmentation_in_percent] > 15
           AND SDDIPS.[page_count] > 2
           AND SDDIPS.[index_id] > 0
        ORDER BY OBJECT_SCHEMA_NAME(SDDIPS.[object_id]), OBJECT_NAME(SDDIPS.[object_id]);

    Il n’y a rien de très compliqué. Je commence par chercher les 100 index les plus lourds de la base sur laquelle je suis connecté. Mais je ne sélectionne que les index qui sont réellement utilisés pour ne garder que ceux qui ont été scannées ou parcourus en totalité depuis le dernier démarrage de l’instance. Pourquoi limiter à 2 le nombre de seek ou de scan ? Je veux exclure le cas où un index sert 1 fois pour une requête ad hoc qui a peu de chance de repasser avant une nouvelle apparition de la comète de Halley (en 2061 pour ceux que ça intéresse). A vous donc de modifier ce chiffre pour obtenir ce que vous voulez.
    Je vais ensuite chercher la fragmentation de chaque index, son nom et je créé l’ordre SQL de REBUILD. Pourquoi le REBUILD et non pas le REORGANIZE, tout simplement parce que j’ai filtré pour une fragmentation supérieure à 15% Si elle avait été inférieure à 15% une réorganisation aurait suffi. Ca vous donne des idées pour faire une V2 de cette requête.

    Voici à quoi ressemble le résultat :

    image

    Je vous épargne les copies d’écran Excel ou SSRS mais je suis sûr que Sébastien se fera un plaisir de proposer une belle interface en WPF qui affiche de beaux camemberts, de beaux graphes, de faire clignoter les valeurs vraiment trop élevées et un bouton pour lancer l’exécution de l’ALTER INDEX …

    Maintenant il suffit de triturer ce petit jeu de données pour savoir quels sont les index fréquemment utilisés et qui nécessitent une ré indexation … A utiliser aussi lorsque l’on vient vous informer qu’une application connait des ralentissements : une requête de ce style en conjonction avec une petite Trace dans le Profiler SQL et quelques minutes plus tard, tout est revenu à la normale.

    August 28

    Hyper-V Howto's

    Vu sur le Blog HyperVoria :

    Tony Soper posted a lot of Hyper-V Howto's on his blog, here is an excerpt:

    Hyper-V How To: Add a PT Disk to A VM with a Script
    Hyper-V How To: Add a Virtual NIC to a VM using Script
    Hyper-V How To: Apply VM Snapshot with Script
    Hyper-V How To: Change ISO in VM Virtual DVD Drive using Script
    Hyper-V How To: Change VHD using Script
    Hyper-V How To: Change VM State using Script
    Hyper-V How To: Reset VM MAC address range using a script
    Hyper-V How To: Clear All Virtual Networking using Script
    Hyper-V How To: Compact a VHD using Script
    Hyper-V How To: Connect Virtual Switch to Host using Script
    Hyper-V How To: Connect a Virtual Switch to Physical NIC using Script
    Hyper-V How To: Connect a Virtual Switch to a VM using Script
    Hyper-V How To: Convert a VHD using Script
    Hyper-V How To: Copy-VM
    Hyper-V How To: Modify VM VLAN IDs for Server Core using Script
    Hyper-V How To: Find RSAT Tools for Win 7
    Hyper-V How To: Create a Differencing VHD using Script
    Hyper-V How To: Create a VM using Script
    Hyper-V How To: Find the right Hyper-V Cmdlet
    Hyper-V How To: Detect if you are inside a VM
    Hyper-V How To: Create a Virtual Switch using Script
    Hyper-V How To (Not): Snapshot FAQ with Ben Amrstrong
    Hyper-V How To: Delete Snapshot using Script
    Hyper-V How To: Delete a VM using Script
    Hyper-V How To: Expand a VHD
    Hyper-V How To: Get a Custom KVPS using Script
    Hyper-V How To: Get Intrinsic KVPS using Script
    Hyper-V: Everything you always wanted to know about clustering* but were afraid to ask
    Hyper-V How To: List Snapshots using Script

    De quoi répondre à bon nombre de questions …

    August 24

    SQL Server 2008 Migration White Papers

    Des guides très utiles pour ceux qui voudraient migrer vers SQL Server 2008 depuis Oracle, MySQL, Informix ou Sybase.

    Les fichiers sont téléchargeables sur le site Microsoft.

    August 20

    Tâches quotidiennes du DBA : l’espace libre dans les bases de données

    Comme tout DBA, une des tâche quotidienne consiste à vérifier qu’il y ait suffisamment d’espace disponible dans les bases de données afin de ne pas bloquer l’activité du serveur SQL.

    Plus que l’espace disponible par fichier, je m’intéresse à l’espace disponible dans un groupe de fichier.

    Pourquoi ?
    J’ai la chance de pouvoir travailler sur du matériel m’offrant suffisamment de ressources disques pour mettre en place la stratégie de stockage suivante :

    • Une LUN TempDB Data
    • Une LUN TempDB Log
    • Trois LUN Database Data + Index
    • Une LUN Database Log
    • Une LUN Backup

    Par ailleurs, il est conseillé de travailler avec différents groupes de fichiers :

    • Le filegroup PRIMARY dédié aux tables système
    • Un filegroup DATA pour les données (voire plusieurs si votre BD est volumineuse –> stratégie de backup par filegroup ou bien si vous utilisez le partitionnement de table)
    • Un filegroup INDEX … pour les index (non cluster, nous sommes bien d’accord !!! L’index cluster ne peut être dissocié des données)

    Autre aspect notable des groupes de fichiers : la répartition des données. En effet si votre groupe de fichier est constitué de plusieurs fichiers, alors SQL Server va répartir de manière uniforme les données sur tous les fichiers de ce groupe. Souvenez vous aussi que lorsque vous créez une table ou un index, vous précisez sur quel groupe de fichier vous allez stocker l’information. Donc si votre groupe de fichier est constitué de 3 fichiers, il y aura 3 thread d’entrée/sortie créés.  Et si vos 3 fichiers sont basés sur des sous-systèmes disques différents, alors non seulement vous pourrez bénéficier d’excellentes performances, mais au delà, statistiquement, pour l’accès aux données, vous avez de grandes chances de réduire le verrouillage … Donc des gains de performances en vue.

    Voilà pourquoi je préfère avoir une vue plus générale et suivre l’évolution de mes groupes de fichiers plutôt que celle de chaque fichier individuellement.

    Comment suivre cet indicateur ?

    Si l’on fait le tour des possibilités offertes, plusieurs méthodes seraient possibles :

    • Créer des alertes sur condition de performance dans l’agent SQL : désolé, on ne peut suivre que le pourcentage de remplissage de la log de SQL. Utile, voire crucial, mais ça ne répond pas à mon besoin.
    • Utiliser le Management Data Warehouse et activer le disk usage : oh les joli graphiques …. Intéressant pour suivre l’évolution de la volumétrie et anticiper un changement de matériel ou un ajout de LUN, mais ça ne répond pas à mon besoin spécifique.
    • Utiliser un outil de monitoring du commerce, Microsoft ou autre. Ca peut revenir assez cher et ne pas forcément correspondre à ce que l’on attend.
    • Passer les bases une par une pour afficher le rapport Disk Usage, à raison de 20 secondes par rapport (valeur tout juste réaliste, le temps d’afficher le rapport et de le consulter), si comme moi, vous avez plus de 200 bases ça vous prendra plus d’1 heure … Cool !!!
    • Trouver un stagiaire qui le fasse pour vous : pas bête,mais songez à son mémoire de stage !!!
    • Reste la solution propriétaire, écrire une belle petite requête qui vous donne l’espace disponible par groupe de fichiers. De manière ensuite à se focaliser sur ce qui est vraiment problématique …

    Voici donc une petite requête qui satisfait à mon besoin, libre à vous de l’adapter …

    Create table #AllDbSpace (
        DbName varchar(100),
        FgName varchar(100),
        NbFiles int,
        CurrentSizeMB int,
        FreeSpaceMB int,
        FreeSpacePct int
    )

    DECLARE @DatabaseName VARCHAR(100)
    DECLARE @SQLScript VARCHAR(6000)

    DECLARE DatabaseCursor CURSOR FOR
                    SELECT [name] FROM master..sysdatabases
                     where dbid > 4
                    ORDER BY [name]

    OPEN DatabaseCursor
    FETCH NEXT FROM DatabaseCursor INTO @DatabaseName

    WHILE @@FETCH_STATUS = 0
            BEGIN

                      SET @SQLScript = 'USE ' + @DatabaseName + ';
                                                      With dbSpace'+ @DatabaseName +' as
                                                        (
                                                            SELECT DB_NAME() AS DbName,
                                                            fg.name AS FgName,
                                                            count(f.name) AS NbFiles,
                                                            sum(f.size/128) AS CurrentSizeMB,
                                                            sum(f.size/128-CAST(FILEPROPERTY(f.name,''SpaceUsed'') AS INT)/128) AS FreeSpaceMB
                                                            FROM sys.database_files f
                                                            inner join sys.filegroups fg on fg.data_space_id = f.data_space_id
                                                            group by fg.name
                                                        )
                                                        INSERT INTO #AllDbSpace
                                                        Select DbName,FgName,NbFiles,CurrentSizeMB,FreeSpaceMB,FreeSpaceMB*100/CurrentSizeMB as ''%FreeSpace''
                                                        FROM dbSpace'+ @DatabaseName +';
                                                        '

                    EXEC (@SQLScript)
                    FETCH NEXT FROM DatabaseCursor INTO @DatabaseName

            END

    CLOSE DatabaseCursor
    DEALLOCATE DatabaseCursor

    SELECT DbName,FgName,NbFiles,CurrentSizeMB,FreeSpaceMB,FreeSpacePct as '%FreeSpace' FROM #AllDbSpace
    DROP TABLE #AllDbSpace

    Certes il y a un beau curseur, mais c’est une solution relativement simple pour balayer toutes les bases d’une instance.

    En retour, vous obtenez le liste des bases, avec les groupes de fichiers, le nombre de fichiers, l’espace total cumulé, l’espace libre cumulé et un pourcentage.

    image

    Il ne reste plus qu’a exécuter cette requête sur toutes vos instance ou bien d’utiliser la fonction de requête multi serveur de SQL Server Management Studio version 2008. Cela vous ajoute le nom de l’instance en première colonne. C’est une bonne solution.

    Par ces temps de grosse chaleur (35°, 38° => entre chaque paragraphe, un plouf dans la piscine), on devient vite flémard. Tout les jours, rejouer la même requête …

    Plusieurs solutions :

    • Vous prenez un stagiaire : hum pas très épanouissant non plus …
    • Vous êtes un/une fan invétéré d’Excel : pas de problème, vous pouvez vous connecter à votre instance, lancer la requête et faire de beaux graphiques
      image
    • Vous être un kimble de Reporting Services comme Jean-Pierre, vous faire un beau rapport (notez que le %FreeSpace, quand les groupes sont réduits indique la valeur minimale des filegroups de la base. Cela permet de parcourir plus rapidement la liste et de ne s’attarder que sur les valeurs faibles. Il est aussi possible de trier différemment le rapport.
      image
    • Rapport auquel vous pouvez vous abonner (recevoir par email, c’est assez sympa et ça fait très pro ..). Vous pouvez aussi le recevoir au format Excel, Word, PDF, CSV, etc …
      image
      Le rapport n’affiche que les valeurs agrégées, et si une valeur parait trop faible, il suffit de cliquer sur le lien présent en bas de l’email afin d’accéder au rapport complet.

    Voilà une bonne chose de faite … Après la surveillance de l’espace disponible, il vous reste du temps pour vos autres tâches quotidiennes : vérification des sauvegardes et des divers jobs de l’agent SQL, l’error log de SQL Server, l’état du log shipping ou du mirroring, les réplications, les requêtes trop consommatrices de ressources. Sans compter avec des tâches hebdomadaires comme jeter un œil sur la fragmentation des index, etc …

     

    Pfiou, que d’articles en prévision. mais il fait trop chaud pour travailler !!!!

    August 18

    SQL Server 2008 R2 : Data-tier Application Components (DAC)

    Avec l’arrivée de SQL Server 2008 R2, de nouveaux horizons s’ouvrent… Voici un rapide coup d’œil sur la fonction Data-Tier Application Components, qui devrait combler une partie du fossé entre les développeurs et les DBA.

    Qu’est ce que le DAC ?
    Il s’agit d’une entité qui contient tout ce dont une application peut avoir besoin : (tables, vues, fonctions, procédures, logins …). Une sorte de fichier MSI en quelques sortes.

    A quoi cela peut-il servir ?
    Cela permet de centraliser tous les objets en vue du déploiement d’une application. Jusqu’à la version SQL Server 2008 incluse, le déploiement d’une application (d’une base) passait par la création d’une nouvelle base sur le serveur de production, la création de scripts de tous les objets  sur le serveur de développement, la création de scripts pour les logins, etc … Un peu fastidieux, et surtout il ne fallait rien oublier. Même si des améliorations étaient arrivées avec SQL Server 2008 et la possibilité de créer des scripts (pouvant inclure les données), il manquait quelque chose.

    Démo :

    Sur serveur SQL en version 2008, je créé une base de test toute simple, contenant quelques tables avec des données, un login avec le user correspondant dans cette base.

    image

    Ensuite, explorons le menu contextuel des tâches en faisant un click droit :

    image

    Un nouvel item est apparu dans la version SQL Server 2008 R2 : “Extract Data-Tier Application”. Voici les copies d’écran de ce Wizard :

    image

    image

    Notez l’extension des fichiers .dacpac. Ce fichiers ne sont pas “lisibles” avec SQL Server Management Studio, ce privilège devrait être donné aux utilisateurs de Visual Studio.

    image

    Au passage, nous pouvons voir que le Wizard propose une phase de validation. Tous les objets de base de donnée ne sont pas compatibles avec le DAC, comme nous le verrons plus tard.

    image

    Un peu de suspense .. Et c’est terminé, le fichier .dacpac est généré :

    image

    Sur mon instance SQL Server 2008 R2, click droit sur le nouvel élément présent dans le dossier Management :

    image

    Utilisons le wizard de déploiement :

    image

    Sélectionnons le fichier .dacpac créé précédemment :

    image

    Nous pouvons modifier le nom de la base, le nom de et l’emplacement des fichiers mdf, ndf et ldf.

    image 

    image

    image

    Le compte rendu d’exécution nous montre clairement que les objets ont bien été créés, y compris les logins.

    image

    Nous pouvons aussi voir le package déployé :

    image

    Au final c’est un moyen facile d’accès pour déployer une base de données sur un serveur de production. par contre, si vous avez des tables contenant des données de référence, il faudra créer des packages SSIS spécifiques pour renseigner les valeurs de ces tables. Car le DAC ne créé que la structure des objets.

    De plus, tous les objets ne sont pas pris en compte, voici le tableau des objets supportés :

    image

    J’aurais voulu mener des tests plus approfondis avec une base plus complexe mais je me suis heurté à une limitation que je trouve très gênante : si vous créez vos propres groupes de fichiers pour une base, ceux ci ne sont pas supportés.
    Pour ma part, dans mes best practices, je préfère laisser tous les objets système dans le filegroup Primary et créer d’autres filegroups pour les données, les index, des blobs, etc … Et cette limitation devient réellement handicapante si on traite avec des tables partitionnées, auquel cas, le DAC ne peut pas s’appliquer. gageons que Microsoft saura corriger ce manque dans les prochaines CTP.

    Pour faire machine arrière, un autre Wizard propose de détacher le base, de la supprimer ou bien de simplement supprimer le DAC :

    image

    image

    image

    image

     

    En conclusion, c’est une nouveauté qui mérite que l’on s’y attarde, mais pour ma part, il y a encore trop de manques pour être réellement exploitable en production.

    Mais on peut aussi se prendre à rêver d’un futur DAC permettant de “migrer” une application (une base de donnée) d’une instance SQL Server vers une autre en fonction du taux de charge des machines physiques. Hyper-V dans sa version 2 propose du live migration de machine virtuelle, pour ma part, j’attends avec impatience le livre migration de base de donnée …

    Jusque là il était possible d’avoir une vision globale de l’activité d’un serveur au travers des DMWs et du rapport serveur dashboard,.

    image

    dans SQL Server 2008 R2 on va un peu plus loin en proposant l’Utility Explorer, une vue synthétique de l’activité de plusieurs instances :

    image

    Il est ainsi aisé de voir la charge CPU par machine (si celle ci héberge plusieurs instances SQL Server) et par instance. De même des indicateurs très clairs permettent d’avoir une vue synthétique sur l’espace disponible dans les bases est suffisant ainsi que l’espace libre sur les disques.

     

    De là à imaginer que si une base plombe les performances de toute une instance, un click droit permette de la migrer sur une autre instance sans coupure de service, il n’y a qu’un pas !!! Hum hum, allez monsieur Microsoft, encore un effort … Le DAC s’apparente à une première étape …

    August 11

    SQL Server 2008 R2 CTP1

    Une fois téléchargé et installé, reste plus qu’a tester cette nouvelle version de SQL Server 2008 …

    image

    A noter dans l’onglet management, “Data-Tier Applications”, de quoi étendre encore les domaine d’activité du DBA …

    August 05

    Windows XP Mode RC est disponible

    Windows XP Mode est passé en version RC et est disponible en téléchargement ici.

    Pour mémoire, Windows XP mode est en fait la nouvelles version de Virtual PC qui permet de faire fonctionner différentes environnement sur votre Windows 7. Vous commencez par installer le nouveau Virtual PC et ensuite vous appliquez le patch Windows XP mode pour bénéficier d’une meilleure intégration dans votre environnement Windows 7. Vous pouvez ainsi lancer une application de vos VM tout comme si elles faisaient partie de votre bureau Windows 7.

    image

    Plus d’informations sur le blog officiel : http://blogs.technet.com/windows_vpc/

    Pensez quand même à vérifier la compatibilité de votre matériel …..

    July 28

    Google – Recherche SQL 2008 cluster

    En regardant les logs d’accès à mon Blog, j’ai constaté, comme beaucoup, que Google était le moteur de recherche le plus présent en point d’accès. Et lorsque l’on regarde de plus près les mots clé utilisés, il y a de bonnes surprises.

    Pour une recherche portant sur les mots clé SQL 2008 cluster, le post que j’avais réalisé à ce sujet remonte en troisième position, juste après 2 liens Microsoft, dont un en anglais. C’est une bonne surprise. Cool.

    image

    Je reste disponible pour toute question à ce sujet, et s’il s’agit de prestation de service, vous pouvez me contacter au travers de mon site : www.conseil-it.fr.

    July 24

    Comparatif coût Hyper-V / VMWare / Xen Server

    Lorsque l’on présente des solutions de virtualisation, la question du coût revient invariablement. La mode est au Green-IT, à la réduction des coût. Notre fibre écolo remonte à la surface. Autant faire du bien à la planète et par la même occasion diminuer le budget informatique. Diminuer le nombre de serveurs va faire baisser la note d’électricité, produire moins de chaleur, donc moins de climatisation, etc … Quelques calculs s’imposent.

    Tout d’abord, petite point sur les tarifs officiels des produits que nous allons utiliser :

    • Xen Server : gratuit. La fonction live migration est incluse mais pas le clustering (2750 $ pour Citrix Essentials)
    • WMWare ESX Server Enterprise : 5 750 $ suivant le fichier PDF présent sur le site Citrix,
    • Windows Server Standard Edition : 999 $ d’après la page de tarification Windows 2008. 1 licence guest OS incluse.
    • Windows Server Enterprise Edition : 3999 $. 4 licences guest OS incluses.
    • Windows Server DataCenter Edition :  2999 $ par processeur, nombre illimité (attention au matériel !!) de licences guest OS incluses

    J’ai volontairement exclu Windows Hyper-V server de ce comparatif car cela revient au même que le solution utilisant Xen Server.
    Prenons comme hypothèse que les machines hôtes sont des machines bi-processeur quad-cores. Important pour le prix des licences Windows Datacenter.

    Simulation n°1 :
    1 seul host et 4 machines virtuelles Windows 2008 Standard.

    Simulation n°2 :
    2 hosts (cluster) et 10 machines virtuelles Windows 2008 Standard.

    Simulation n°3 :
    2 hosts (live migration) et 10 machines virtuelles Windows 2008 Standard.

    Simulation n°4 :
    2 hosts (live migration) et 50 machines virtuelles Windows 2008 Standard.

     

    ESX Xen Hyper-V
    1 5.750 + (4 x 999)
    = 9.746 $
    4 x 999 = 3.996 $ Si host Win2k8 Std : 999 + 3 x 999 = 3.996 $
    Si host Win2k8 Entreprise : 3.999 $
    2 (2 x 5.750) + (10 x 999)
    = 21.490 $
    (2 x 2.750) + (10 x 999)
    = 15.490 $
    Si host Win2k8 Entreprise : (2 x3.999) + (2 x 999) =  9.996 $
    Si host Win2k8 DataCenter : (4 x 2.999) =  11.996 $
    3 (2 x 5.750) + (10 x 999)
    = 21.490 $
    10 x 999 = 9.990 $ Si host Win2k8 Entreprise : (2 x3.999) + (2 x 999) =  9.996 $
    Si host Win2k8 DataCenter : (4 x 2.999) =  11.996 $
    4 (2 x 5.750) + (50 x 999)
    = 61.450 $
    50 x 999 = 49.950 $ Si host Win2k8 Entreprise : (2 x3.999) + (42 x 999) =  49.956 $
    Si host Win2k8 DataCenter : (4 x 2.999) =  11.996 $

     

    Ok, je vous l’accorde, des machines 8 cœurs pour faire tourner autant de machines virtuelles, c’est un peu limite. Doublons donc la puissance de nos machines hôtes. Passons à 4 processeurs 4 cœurs ou 6 cœurs …

    ESX Xen Hyper-V
    1 5.750 + (4 x 999)
    = 9.746 $
    4 x 999 = 3.996 $ Si host Win2k8 Std : 999 + 3 x 999 = 3.996 $
    Si host Win2k8 Entreprise : 3.999 $
    2 (2 x 5.750) + (10 x 999)
    = 21.490 $
    (2 x 2.750) + (10 x 999)
    = 15.490 $
    Si host Win2k8 Entreprise : (2 x3.999) + (2 x 999) =  9.996 $
    Si host Win2k8 DataCenter : (8 x 2.999) =  23.992 $
    3 (2 x 5.750) + (10 x 999)
    = 21.490 $
    10 x 999 = 9.990 $ Si host Win2k8 Entreprise : (2 x3.999) + (2 x 999) =  9.996 $
    Si host Win2k8 DataCenter : (8 x 2.999) = 23.992 $
    4 (2 x 5.750) + (50 x 999)
    = 61.450 $
    50 x 999 = 49.950 $ Si host Win2k8 Entreprise : (2 x3.999) + (42 x 999) =  49.956 $
    Si host Win2k8 DataCenter : (8 x 2.999) =  23.992 $

     

    Je vous encourage a faire ces calculs en fonction de votre configuration, tant au niveau des machines hôtes que des machines virtuelles.

    Quelles conclusions purement pécuniaires pouvons nous tirer de ces simulations :

    • VMWare reste malheureusement cher, très cher …
    • La solution Xen Server (qui fonctionne vraiment très bien) est réaliste d’un point de vue tarif, surtout si l’on recherche la fonction de déplacement instantanée des machines virtuelles. La version 5.5 apportera encore quelques améliorations, mais toujours pas de virtualisation des entrées/sorties. Xen fait tarif égal avec Hyper-V sur un petit nombre de machines virtuelles. A voir au cas par cas, donc.
    • La solution Microsoft, basée sur Hyper-V (et Hyper-V2 pour le live migration) apparait finalement comme la plus économique dans bien des cas. Même la solution Datacenter qui peut paraitre chère compte tenu du mode de licence par processeur voit tout son intérêt lorsque le nombre de machines virtuelles augmente.

    Au final, la solution Microsoft Hyper-V mérite d’être mise en concurrence avec les autres produits lors de tout projet de virtualisation. Techniquement fiable, performante, si on garde en tête qu’un disque VHD de taille fixe est plus performant qu’un disque dynamique (de mémoire 94% pour un VHD fixe des performances du disque physique, contre 87% en dynamique). les disques pass-trough permettent de passer outre les limites de taille et de perte de performance. Les évolutions apportées par Windows 2008 R2 avec les disques CSV (Clustered Shared Volume) et le Live Migration des machines virtuelles va encore donner plus de poids à cette solution. Pensez également à valider le support de votre configuration …

    A lire également un article sur LeMagIT à propos de la virtualisation des serveurs.

    La virtualisation ne concerne pas que des nouveaux environnements, il est tout a fait possible de convertir une machine physique en machine virtuelle. System Center Virtual Machine Manager qui permet de gérer des machines hôtes de type Hyper-V, Virtual Server 2005 et VMWare (ainsi que les machines virtuelles), permet les conversions P2V. Une version d’essai pleinement fonctionnelle est téléchargeable.

    Avec une version Windows Server Hyper-V 2008 totalement gratuite (par contre il n’y a pas de licence pour les OS clients), il ne vous reste qu’à … virtualiser !

    Windows 7 sur un Netbook PC

    Avec la sortie imminent de Windows 7 RTM, les possesseurs de Netbook PC sous Windows Vista ou Windows XP (voire d’autres OS) seront probablement tentés d’installer la nouvelle mouture de l’OS client de Microsoft.

    Inconvénient de ces petite machines : l’absence de lecteur de DVD, indispensable à l’installation de l’OS …

    Voici un billet qui propose de rendre bootable une clé USB (4 Gb minimum) afin d’installer Windows 7 depuis ce média.