Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

SQL Server 2008 R2 : Etre averti(e) lors de la sortie de la Beta

C'est sur cette page que ca se passe :
http://www.microsoft.com/sqlserver/2008/en/us/r2.aspx

Vous pourrez d'ailleurs y découvrir une partie des nouveautés de SQL Server 2008 R2.

Bonne inscription…

Posté le par christian | 0 commentaire(s)

SQL Server 2008 R2 : Quoi de neuf dans la boîte par rapport à 2008 ?

Appelé jusqu'à lors par son nom de code Kilimanjaro, cette future version « mineure » de SQL Server se veut un assemblage de nom de code variés :

  • Nom de code « Gemini »
    • Intégration à Excel d'une code OLAP client haute performance permettant une haute autonomie dans la conception des rapports en croisant des données serveur avec des données locales. La partie collaborative n'est pas en reste avec la possibilité de partager / dériver les rapports les noter et suivre leur utilisation.
  • Nom de code « Synthesis »
    • Simplification de la gestion de « fermes » de serveur et du déploiement des applications sur ces « fermes ». Si vous avez des dizaines ou centaines de serveurs à gérer cette fonctionnalité est pour vous.
  • Nom de code « Bulldog »
    • Apport dans le domaine du Master Data Management (MDM)… Je ne détaille pas mes compétences sur ce sujet étant proche de zéro.
  • Nom de code « Madison »
    • Dans le domaine du datawarehouse avec la possibilité de paralléliser certaines requêtes sur des serveurs multiples.
  • Nom de code « Orinoco »
    • Gestion d'évènements complexes en temps réel (Complex Event Processing). Le but étant de réagir à des évènements avec une rapidité proche de la microseconde, là où les traitements de requête avoisinent plutôt la milliseconde, sans forcément garder trace en base. Fournit entre autres jointures, existence, agrégat, ranking, en simili temps réel.
  • Reporting Services
    • Les cartes sont enfin là !
  • Support de 256 CPU
    • De 64 CPU max à 256 CPU… Grace à Windows Server 2008 R2 (la limitation CPU étant liée à l'OS) !

C'est déjà un challenge de mettre la main sur tous ces noms de code.

Alors SQL Server 2008 R2, version « mineure »… oui et non, majeure pour le décisionnel et le traitement de données complexes et long, mais effectivement plutôt mineure côté moteur relationnel où les nouveautés sont maigre, mais projet de beaux changements dans la version suivante !

Ah j'oubliais CTP prévue entre Juillet et décembre, certains avancent même « pour l'été »…

Bonne nouvelle…

Posté le par christian | 0 commentaire(s)
Classé sous :

Visual Studio Team Database : Référencer les objets système de MASTER et MSDB

J'avais fait un petit topo sur le gestion des références dans les projets de base de données avec Visual Studio Team System Database :

http://blogs.codes-sources.com/christian/archive/2009/03/27/team-system-database-quelques-conseils-pour-importer-ses-donn-es-et-g-rer-les-r-f-rences.aspx

Je viens de découvrir que pour les objets système c'est plus simple que ce que je pensais. Les objets systèmes sont ceux que l'on trouve entre autre dans « master » et « msdb » qui sont 2 des principales bases de données système de SQL Server. Les objets systèmes à partir de SQL Server 2005 sont préfixé pour bonne partie d'entre par le schéma sys.

On trouvera un fichier dbschema qui est le résultat de la compilation d'un projet de base de données pour master et msdb dans les répertoires suivant :

En 32 bits

C:\Program Files\Microsoft Visual Studio 9.0\VSTSDB\Extensions\SqlServer\200X\DBSchemas

En 64 bits

C:\Program Files (x86)\Microsoft Visual Studio 9.0\VSTSDB\Extensions\SqlServer\200X\DBSchemas

En remplaçant le X par le dernier chiffre de votre version de SQL Server. Copiez ce ou ces fichiers dans le répertoire de votre projet et ajouter une référence de base de données dans votre projet vers ce ou ces fichier(s) et le tour et joué.

Bonnes références…

Team Database : Microsoft Visual Studio Team System 2008 Database Edition GDR R2

Ca n'est pas un scoop ca fait un mois qu'elle est dispo, par contre elle corrige quelques bugs et pourrait vous faciliter la vie si vous êtes un utilisateur de celle-ci !

Téléchargement à cette adresse :
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=bb3ad767-5f69-4db9-b1c9-8f55759846ed

Merci à Kangoo pour me l'avoir signalée.

Bon téléchargement…

SQL Server : L’effet Domino ou comment une simple lecture de données plante un serveur de bases de données

Pas facile de se rendre compte qu'un simple SELECT peu avoir des conséquences néfastes sur un serveur de base de données. Voici un petit descriptif de ce qui aurait pu vous arriver et pourrai peut être vous arriver !

Un SELECT nécessite, pour s'exécuter correctement, que les données nécessaires à son traitement soient préalablement chargées en mémoire. Certaines opérations peuvent se faire de manière séquentielle et ainsi permettre de traiter une première partie de données, puis les suivantes. D'autres plus gourmande nécessiteront la totalité des données, c'est le cas par exemple de tris ou de générations de tables de hachage. Dans ces cas le serveur qui n'a pas assez de mémoire à disposition va alors utiliser tempdb. Tempdb est une base de données commune à l'instance toute requête dans toute base de données peu être amenée à utiliser celle-ci en cas de besoin.

Toute écriture dans toute base de données va être journalisée, ce qui passe systématiquement par l'écriture dans le journal de transaction de cette base de données, ces écritures sont séquentielles et synchrones. Tempdb n'échappe pas à cette règle.

C'est là que va se produire un double problème, votre serveur manque de mémoire et va forcer l'écriture de données présentes dans le cache et modifiées. Votre requête en lecture vient de « purger » le cache et les nouvelles arrivantes se trouvent à court de cache et en attente de nouvelles données venant du disque. De plus comme SQL Server ne dispose pas d'assez de ressources mémoire il utilise tempdb et écrit dans le journal de transactions. Si par le plus grand des hasards les journaux de transaction de toutes les bases de données sont sur le même volume et bien vous bloquez les écritures de toutes les bases de données des serveurs. Les lectures, elles, eh bien sont bloquées par le manque de mémoire et l'obligation de les lire sur le disque.

Et si les logs et données sont sur les même disques, eh bien les lectures bloquent les écritures et inversement et on mal. Rassurez vous ce problème n'est que temporaire, mais illustre bien quelques point importants :

  • Pas de grosses requêtes manuelles en production (SELECT sans * /TOP & WHERE obligatoire)
  • Séparez les journaux de transaction et les données
  • Séparez Tempdb des autres bases de données
  • Dimensionnez la mémoire du serveur pour servir les données source de votre plus grosse requête (si celle-ci est relativement fréquente).
  • En cas de grandes concurrences entre écritures et lectures, pensez à séparez ces derniers dans des instances différente ou passez par un système type resource gouvernor dans SQL Server 2008 (si cela est possible bien sûr).

C'est l'effet domino, une requête en lecture sur une base X peut bloquer une écriture ou lecture sur une base Y. On recherche alors le bien de contention, qui dans mon exemple est le système disque. Bien d'autres exemple existe mais celui-ci reste intéressant et assez fréquent !

Bonnes requêtes…

SQL Server : Prochaine version "SQL Server 2008 R2"

C'est la mode dans les versions actuelles chez Microsoft de réaliser des R2, SQL Server y passe aussi avec cette version anciennement connue sous le nom de code « Kilimanjaro », attention cette version ne sera pas la version 11 du moteur (SQL Server 2008 est la 10), cette version apportera essentiellement des nouveautés sur la BI et quelques nouveautés au niveau de la gestion de « fermes » de serveur SQL.

Vivement les premières Beta, la version finale est annoncée pour la fin de l'année !

Bonne nouvelle…

Posté le par christian | 2 commentaire(s)

Windows Seven : Client VPN Cisco en 64 bits ?

Venant de finir mon installation sur un Windows Seven x64 RC, dont je dois dire que je suis pleinement satisfait. Ma machine a enfin retrouvé sa vitesse d'entant, en tout cas pour le moment. L'installation a été plus rapide que celle de Vista sur la même machine et seul 4 drivers n'ont pas été reconnus : Scanner Epson, Carte son Creative, Imprimante HP LaserJet et WebCam Microsoft (comme quoi les cordonniers…). A noter un gros effort de beaucoup d'éditeur, car les drivers pour la Webcam et la carte son étaient disponible en Beta sur le site des éditeurs respectifs.

Se pose maintenant la question soulevée par Fabrice ici : http://blogs.codes-sources.com/fabrice69/archive/2009/01/22/windows-seven-client-vpn-cisco.aspx

En fait en 32 bits, j'ai eu l'occasion de tester, cela fonctionnait dans la Beta précédente pour moi. Mais comme j'ai décidé de refaire l'installation en 64 bits, je viens de m'apercevoir que le 64 bits n'est pas actuellement supporté par Cisco et Cisco n'a semble t'il pas l'intention de le supporter pour ce logiciel !

Alors que faire… Eh bien s'orienter vers des solutions tierces, en voici quelques unes (si vous en avez d'autres, postez les dans les commentaires) :

Je me pose une question, pourquoi Microsoft n'a jamais mis en place le protocole IPSec pour la connexion VPN dans Windows ? Seuls le L2TP et le PPTP sont disponible côté client et serveur depuis la version 2000 de Windows !

D'autre part comment un éditeur majeur tel que Cisco peut faire l'impasse sur le support d'une plate forme complète qui est déjà très rependu et qui avec l'augmentation croissante de la mémoire sur les machines va nécessairement s'imposer très vite ?

Comme dit plus haut ce billet n'a pas vocation a être exhaustif, n'hésitez pas à poster vos solutions gratuites ou payantes !

Bonne connexion…

Posté le par christian | 1 commentaire(s)
Classé sous :

Windows Seven : Mais que veut dire Seven ?

6.1

No comment …

Posté le par christian | 12 commentaire(s)
Classé sous :

SQL Server : Quels sont les problèmes de performance les plus fréquent ? Partie 2/5 : Contention lié aux verrous / Interblocages (Deadlock)

Sans aucun doute le second problème le plus fréquent sur un serveur de base de données type SQL Server. Ce problème augmente avec la charge que subit le serveur et souvent la conséquence d'autres problèmes sous jacent.

Partie 2 : Contention lié aux verrous / Interblocages (Deadlock)

Les verrous ont pour rôle d'éviter les collisions de lecture / écriture et certains comportement non souhaités durant les lectures. Malheureusement quand beaucoup de lectures et d'écritures ont lieux simultanément cela à tendance à bloquer le serveur, ou tout du moins à mettre en file d'attente ces derniers jusqu'à obtention du dit verrou.

Dans des cas sévères et lorsque le code n'a pas été écrit en vue de les éviter les problèmes d'inter blocage (deadlock) surviennent et mettent fin à certaines connexions. A noter, les interblocages peuvent aussi se produire sans que des problèmes de verrous soient avérés et important, si les temps de lectures et d'écritures sont important cela provoquera aussi ce type de problème sans forcément voir apparaitre le premier. Le phénomène d'escalade de verrou peut aussi se produire (lock escalation) qui permet à SQL Server d'obtenir un verrou d'une granularité pus importante lorsqu'un grand nombre de verrou est posé sur une table.

Le premier problème se manifeste par des ralentissements des requêtes, soit de manière franche et provoque des Timeout des requêtes, soit de manière plus insidieuse et ajoute quelques milliseconde à quelques secondes à chaques requêtes. Ce dernier cas est très dur à détecter et on se rendra compte du problème que si ces temps deviennent tellement importants qu'elles provoqueront les Timeouts. Il y a bien entendu des compteurs de performance à suivre pour détecter tel ou tel problème.

Les solutions consistent à écriture soigneuse des transactions en limitant leur durée (on regroupera si possible les écritures ensemble en démarrant la transaction juste avant et en la terminant juste après) et ordonnant convenablement les opérations pour éviter les interblocages (choisissez un ordre arbitraire comme l'ordre alphabétique des tables ou un ordre plus logique). Pour l'escalade de verrou il y a des solutions à manier avec précaution tel que : http://blogs.codes-sources.com/christian/archive/2008/06/11/sql-server-sql-server-2008-promotion-de-verrou-lock-escalation-statistiques-sur-les-blocages.aspx. D'une manière générale il est conseiller d'avoir des transactions impactant un faible nombre d'enregistrements pour les éviter. Une indexation correcte est elle aussi indispensable pour limiter le plus possible les problèmes de blocage. Même si je n'aime pas cette solution l'utilisation d'un niveau d'isolation plus bas est envisageable (NOLOCK, http://blogs.developpeur.org/christian/archive/2007/03/08/sql-server-les-verrous-et-l-utilisation-de-nolock.aspx ), c'est une solution très fréuquente mise en œuvre sur les version d'avant SQL Server 2005 qui a vu arriver les mode de concurrence d'accès dit optimistes que sont les mode SNAPSHOT (voir les améliorations au cours des versions : http://blogs.developpeur.org/christian/archive/2008/02/29/sql-server-gestion-des-transactions-verrous-et-concurrence-d-acc-s-aux-donn-es.aspx).

Comme je le disais plus haut ce problème découle souvent d'un autre, un problème de disque engendre très souvent comme « symptôme » un problème de blocage.

Les autres parties

Partie 1
http://blogs.codes-sources.com/christian/archive/2009/04/07/sql-server-quels-sont-les-problemes-de-performance-les-plus-frequent-partie-1-sur-5-le-systeme-disque.aspx

PS : Je mettrais des requêtes et des compteurs de performance pour diagnostiquer ces problèmes dans des billets séparés après cette série d'article… Je manque un peu de temps pour le faire en ce moment :o(

Bon dépannage…

SQL Server 2008 : Web Edition

Je reviens sur cette édition nouvelle venue avec SQL Server 2008, car sa tarification et son positionnement est loin d'être clair.

C'est une édition qui se place entre une édition Standard et Express en termes de tarification. Elle reprend la plupart des caractéristiques de l'édition Standard.

Les points clefs :

  • 4 processeurs supportés quelque soit le nombre de cœurs
  • Pas de limite de mémoire (limité par le système d'exploitation)
  • Disponible en 32 bits (x86) et 64 bits (x64)
  • Pas d'outils de Business Intelligence
  • Haute disponibilité limitée au log Shipping
  • Tarification (très) avantageuse avec contrat SPLA
  • Utilisation exclusive derrière un serveur Web ou Web Service

Du point de vue de la tarification on la retrouve en OPEN, SELECT et autres. C'est un peu contraire a ce qui avait été annoncé au départ, et son tarif se trouve logiquement entre un édition Standard et Express (en tarification processeur).

L'intérêt de cette édition est particulièrement pour les fournisseurs de service au travers du Web, hébergeur, solution ASP, etc. qui pourront via le contrat SPLA, louer cette édition pour moins de 20 € par mois et par processeur. Ce qui fait dans 240 € à l'année pour un processeur, tarif très compétitif !

Bonne édition…

Posté le par christian | 0 commentaire(s)
Classé sous :

SQL Server 2008 : Liste de prix et détails des éditions (réactualisé - Avril 2009)


Remise à jour des tarifs de SQL Server 2008 avec des précisions supplémentaires et l'actualisation au 1er avril 2009 (tarifs publics - Open Business).

  Prix par processeur Prix Serveur … … Plus CAL (par utilisateur ou machine)
Editions Commerciales      
Enterprise 26 108,27 € 9 381,44 € 178,84 €
Standard 6 264,07 € 979,73 € 178,84 €
Standard for Small Business N/A 942,99 € 160,84 €
Workgroup 4 086,87 € 796,12 € 161,11 €
Web 3 821,77 € En SPLA : ~20 € / mois / CPU
Developer N/A 44,36 € N/A
Editions Gratuites      
Express  Gratuit Gratuit Gratuit
Compact Gratuit Gratuit Gratuit

L'édition Web est une édition qui supporte jusqu'à 4 processeurs, sans limitation de mémoire ni limitation de taille de base de données. Elle supporte de plus le Log Shipping.

Plus de détails ici :
http://blogs.codes-sources.com/christian/archive/2009/04/24/sql-server-2008-web-edition.aspx

L'édition Small Business qui fait parti de l'offre petite et moyenne entreprise permet d'avoir une licence standard à moindre coûts pour jusqu'à 75 personnes.

Pour rappel pour le fonctionnement des licences, voici le billet que j'avais fait sous SQL Server 2005 :
http://blogs.codes-sources.com/christian/archive/2006/12/17/sql-server-2005-licences-et-prix.aspx

Bonne consultation des prix…

SQL Server 2008 : Correctif cumulatif n 1 pour le Service Pack 1 et diagramme explicatif sur les correctifs de SQL 2008

Il est disponible ici et il s'applique directement après le Service Pack 1.

http://support.microsoft.com/kb/969099

Pour s'y retrouver dans la jungle des correctifs pour SQL Server 2008, voici un tableau de synthèse :

 

Les CU sont les correctifs cumulatifs qui sortent tous les 2 mois avec tous les bugs corrigés depuis la version finale ou le dernier service Pack. Le Service Pack 1 reprend les bugs corrigés dans le correctif cumulatif numéro 3, pour bénéficier des corrections du 4ème il faudra appliquer le correctif cumulatif numéro 1 qui est sorti après ce Service Pack (voir en haut).

Espérons que ce soit plus limpide après ce graphique !

Bon téléchargement...

Divers : Les animaux et l’informatique…

En ce début de week-end de Pâques (qui a déjà commencé pour les Mosellans et Alsaciens je précise) j'attends fébrilement l'arrivé du lapin qui vient apporter des cadeaux ce week-end… Pourquoi ? Je viens juste d'avoir mon imprimante Laser, qui a seulement 2 semaines, arrosée par un des chats ; et la petite est bonne pour la poubelle (l'imprimante, je précise dès fois que…).

Voici un résumé des 5 dernières années et de ce qui est arrivé à mon équipement informatique à la maison :

  • Ordinateur portable
    • Le chat s'est un jour dit que le clavier était à son gout t s'est fait les griffes sur le clavier, et à méticuleusement mordu celles qui était parties. Heureusement le service commercial chez Dell m'avait offert l'assurance avec le portable, là où d'habitude je considère ce genre de chose inutile et bien çà a pour une fois servis.
      Enfin après un coup de fil de type :
      « Est-ce que vous couvrez les dégâts occasionnés par des animaux ?
      • C'est-à-dire ?
      • Mon chat s'est fait les griffes sur le clavier
      • Bien entendu Monsieur, mais pouvez vous nous faire parvenir une photo du clavier ?
      • Oui pas de problème
      • A réception nous vous enverrons un technicien pour le remplacement du clavier »
  • Téléphone portable
    • Le fil du kit main libre d'un téléphone portable Nokia qui a subit la mâchoire d'un chaton, le kit a fini directement à la poubelle, heureusement que je ne suis pas accroché à ce genre d'accessoire.
  • Imprimante Laser
    • Bah une petite crotte accompagné d'une marre de liquide jaune sur le dessus, et le tambour optique a pris, la cartouche de Toner avec et sans doute un parti du système électrique, car cette dernière en plus l'odeur désagréable même après séchage refusait de démarrer… Bref destination poubelle pour l'imprimante Laser HP toute neuve ! Et direction magasin pour une nouvelle !

Moralité quand vous avez des animaux, assurez le matériel quand vous le pouvez, ca vous évitera des dépenses inutiles !

Le mieux étant quand même de penser à une protection du matériel type mur de béton ou autres… Allez, je retourne aux ciment et parpaings ;o)

Joyeuses Pâques et Méfiez vous du lapin.

Posté le par christian | 1 commentaire(s)

SQL Server 2008 : Service Pack 1 version finale disponible en téléchargement

Disponible depuis peu… (7 avril 2009)

Comment faire pour obtenir ?

Pour obtenir Microsoft SQL Server 2008 SP1, ici:

http://www.microsoft.com/downloads/details.aspx?FamilyID=66ab3dbb-bf3e-4f46-9559-ccc6a4f9dc19

Pour le Feature Pack avril 2009, ici:

http://www.microsoft.com/downloads/details.aspx?FamilyID=b33d2c78-1059-4ce2-b80d-2343c099bcb4

Pour SQL Server 2008 Expres, ici:

http://www.microsoft.com/downloads/details.aspx?FamilyID=01af61e6-2f63-4291-bcad-fd500f6027ff

La liste des corrections ?

http://support.microsoft.com/kb/968369/

Les nouveautés ?

Essentiellement 2 . . .

  • L'intégration du service Pack à l'installation d'un SQL Server 2008 version finale avant installation.
  • Report Builder version 2.0 qui intéressera tout particulièrement les mordus de BI avec Reporting Services.

Il n'y a pas d'apport de nouvelles fonctionnalités dans le moteur relationnel, le risque de régression est faible en comparaison des précédent Service Packs (testé sur 3 serveur avec la Beta). Les tests des Service Pack sont plus poussés que les simple cumulative update disponible tous les 2 mois, donc si vous souhaitez sauter le pas passez à cette version !

Bon téléchargement...

SQL Server : Quels sont les problèmes de performance les plus fréquent ? Partie 1/5 : Le système disque.

Faisons rapidement un TOP 5 des problèmes les plus fréquent sur un serveur de base de données équipé de SQL Server (et de tous les moteurs de base de données relationnel en passant).

Partie 1 : Problème de performance disque

C'est le problème numéro 1, le système disque est sous dimensionné car beaucoup de gens pense qu'un serveur de base de données ne consomme que des ressources processeur… Mais les données doivent bien être lues quelque part ? Et plus elles sont importantes, plus lent est leur lecture et leur traitement. Une manière de « compenser » le manque de disque ou un système peu performant est d'ajouter de la mémoire et ainsi maximiser les données présentes dans le cache et limiter les lectures sur le disque.

L'une des raisons de ce sous dimensionnement c'est que souvent les administrateurs en charge des machines d'arrête sur le capacité interne en nombre de disque des serveurs. Or il existe des « extender » en rack pour ajouter environ 20 / 40 disques et qui permettent de les connecter au serveur. Les solutions plus dispendieuses tels que les SAN (Storage Area Network, qui une banque de disque déportée sur le réseau avec ses contrôleurs disque et des interfaces réseau spécifiques) n'est donc pas une obligation dès que l'on dépasse 8 disques (nombre courant maxi de disque interne sur des serveurs) !

De plus le choix du niveau RAID pour des disques interne doit bien être réfléchit (http://blogs.codes-sources.com/christian/archive/2007/01/15/syst-me-articles-sur-le-raid.aspx) ainsi que la qualité du contrôleur, le niveau de cache, la protection du cache par batterie. Gardez en tête que 2 nombres seront vos références pour mesurer la vélocité d'un tel système : Mo/s pour ce qui est des lectures / écritures séquentielles, IO/s pour ce qui est des lectures / écritures aléatoires. Un disque SSD, par exemple, est très bon en nombre d'IO/s, mais assez décevant en Mo/s particulièrement en écriture.

Et enfin la séparation données (MDF/NDF), journaux de transactions (LDF) est indispensable. C'est le minimum syndical sur vos serveurs, car le type d'IO de ces 2 types de fichier est très différent et les uns risquent de bloquer les autres. Même avec des contrôleurs RAID récent équipé d'une bonne quantité de cache le phénomène est visible. Seuls les SAN permettent un tant soit peu de rendre la chose plus transparente, même si tous les gros déploiements suivent la même règle de séparation des LUNS (volume SAN) des données et journaux. Idéalement vous pourrez découper vos volumes de la manière suivante :

  • 1 volume pour le système
  • 1 volume pour le fichier d'échange (SWAP, même si ce dernier ne sera pas utilisé volontairement par SQL Server, il pourra servir à d'autres services et applications)
  • 1 volume pour les métadonnées (bases de données systèmes, fichier MDF des bases de données utilisateurs)
  • x (si possible autant que de CPU) volumes pour les données
  • y (si possible autant que de CPU) volumes pour les index non ordonnés (non-clustered)
  • 1 volume pour tempdb (données)
  • 1 volume pour tempdb (journal de transaction)
  • 1 volume pour les journaux de transactions des autres bases de données.
  • 1 volume pour l'import / export / backups /etc.

Par volume j'entends regroupement de disques via un agrégat RAID, ce n'est pas un disque, mais un ensemble. Cette réparation est « idéale », avec moins de disques certains volumes peuvent être regroupés (Journaux avec journaux et données avec données). Le minimum serait :

  • 1 volume système + SWAP
  • 1 volume données
  • 1 volume tempdb (Données)
  • 1 volume journaux de transaction (bases utilisateur + tempdb)

Les backups, si possible, sur un autre volume que les fichiers de données ou de journaux de transactions.

Partie 2 :
http://blogs.codes-sources.com/christian/archive/2009/04/27/sql-server-quels-sont-les-probl-mes-de-performance-les-plus-fr-quent-partie-2-5-contention-li-aux-verrous-interblocages-deadlock.aspx

Bonne configuration disque...

SQL Server : Droits pour lire et écrire dans la base de registre

J'ai illustré il y a peu l'utilisation de la procédure stockée étendue xp_regread (http://blogs.codes-sources.com/christian/archive/2009/03/12/sql-server-d-terminer-o-se-trouvent-les-r-pertoires-par-d-faut.aspx) Bien que non documentée et susceptible d'être changé dans les prochaines versions, elle pourra se révéler d'un aide précieux. Sachez que cette-ci possède un homologue pour réaliser des écritures dans la base de registre xp_regwrite (et quelques autres).

Ces 2 procédures stockées sont utilisable pour tous les utilisateurs du serveur, tout login crée au sein d'une instance peu utiliser ces 2 procédures stockées (ou du moins xp_regread, les écritures sont elles plus restreintes). Mais par contre seul les membres du rôle serveur sysadmin possède le privilège d'utiliser le compte de service de SQL Server pour aller lire et écrire où bon leur semble dans cette même base de registre.

Pour résumer les droits :

  • Votre login n'est pas membre du rôle serveur « sysadmin »
    • Vous pouvez lire les clefs de base de registre suivantes avec xp_regread :
      • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<INSTANCE>
      • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<version>
      • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer
      • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQLServer
    • Vous pouvez écrire dans les clefs de base de registre suivante avec xp_regwrite :
      • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<INSTANCE>
      • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlset\Services\SQLAgent$<INSTANCE>
    • Si vous souhaitez accorder des lectures ou écritures supplémentaires dans la base de registre il faudra le faire via en ajoutant les clefs Xp_regread Allowed Paths & Xp_regwrite Allowed Paths dans
      • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<Instance_name>\MSSQLServer\ExtendedProcedure (A créer s'il n'existe pas)
      • Et lister les clefs que vous souhaitez rendre accessible via les procédures stockées cités. Xp_regread Allowed Paths & Xp_regwrite Allowed Paths sont de type Multi string value.
      • Les clefs listées ici ne seront accessibles que si le compte de service de SQL Server y a effectivement accès. Sinon l'exécution de l'une des procédures stockées cités se soldera par une erreur du système d'exploitation.
  • Votre login est membre du rôle serveur « sysadmin »
    • Toutes les clefs de base de registre sont accessibles à condition que le compte de service de SQL Server ai les droits appropriés dessus. Soit celui-ci est le compte système auquel cas aucune restriction ne s'appliquera, soit un compte local/network service ou un utilisateur standard auquel cas seuls les clefs de base de registre nécessaires à l'exécution de SQL Server seront accessible. Vous devrez alors accorder les droits à la main avec l'éditeur de base de registre.

Voici une référence sur le sujet, mais qui date de SQL Server 2000, vous constaterez une différence avec votre version (2005 ou 2008) : http://support.microsoft.com/kb/887165/en-us

Moralité, faites très attention au choix du compte de service :
http://blogs.codes-sources.com/christian/archive/2008/04/28/sql-server-quels-comptes-de-service-choisir.aspx

Un login membre du rôle serveur « sysadmin » (sa par défaut) peut avoir accès à toute la configuration de Windows dans certains cas et je vous laisse imaginer les dégâts possibles ! Pour permettre une utilisation de la base de registre sans passer par des privilèges élevés il vous faudra user des clefs cités ci-dessus et de l'éditeur de base de registre.

Pour tuer dans l'œuf tout débat sur le sens de stocker quelque chose dans la base de registre : je n'aime pas cela et je préfère loin de là une base de données avec des tables dédié à la configuration de l'application… Mais dans certaines situations l'existant est là et vous ne pourrez pas y couper !

Bonne configuration...

Posté le par christian | 0 commentaire(s)

SQL Server : Pourquoi ma requête est lente en production, mais pas quand je l’exécute dans Management Studio ?

Derrière cette question se cache un des plus gros problèmes d'optimisation de requêtes. Il faut savoir que le moteur de base de données est adaptif et qu'il sait s'adapter aux ressources disponibles et aux volumes de données présent dans les tables. C'est d'ailleurs bénéfique dans la majorité des cas… Qui souhaiterait utiliser 8 processeurs pour exécuter une requête sur un serveur utilisant déjà 100% des CPU ?

Le problème du phénomène d'écrit plus haut n'est généralement pas là. En effet même l'activité du serveur est calme et que la même requête avec les mêmes paramètres est exécutée avec quelques secondes d'intervalle entre votre application et Management Studio le comportement change. En fait une application ado.net et Management Studio ne partage pas les même paramètres de connexion ce qui explique l'origine de ce problème.

On retrouve ces fameux paramètres de connexion avec :

select * from sys.dm_exec_sessions

Les colonnes (entre autres) :

  • quoted_identifier
  • arithabort
  • ansi_null_dflt_on
  • ansi_defaults
  • ansi_warnings
  • ansi_padding
  • ...

Sont considérées comme telles…

SQL Server va alors mémoriser certains de ces paramètres avec le plan d'exécution de la requête. De fait, le plan ne sera réutilisé que si les paramètres sont les mêmes. La requête suivante sera déclinée en 2 plans d'exécutions différents :

SET ANSI_NULLS ON

 

SELECT * FROM MaTable WHERE MaCol = NULL

 

SET ANSI_NULLS OFF

 

SELECT * FROM MaTable WHERE MaCol = NULL

Ici le problème sera visible si vous avez une grande quantité d'enregistrement ayant NULL stockée dans la colonne MaCol et un index présent sur cette même colonne. Les plans seront alors très différent l'un de l'autre.

La problématique est double. D'une part les paramètres de connexion sont différents entre les 2 applications (Ado.Net et Management Studio) et d'autre part la requête de part sa complexité peut être déclinée en plusieurs plan d'exécution différent.

La solution à ce problème sera supprimer le plan fautif (celui qui est le plus lent des 2), en vidant par exemple le cache de procédure (DBCC FREEPROCACHE) mais cette solution n'est que temporaire, le problème reviendra tôt ou tard.

La solution durable est de signaler à SQL Server que la requête sur lequel nous planchons risque de générer des plans d'exécution différent en fonction du contexte et de tout simplement lui sire de régénérer un nouveau plan à chaque exécution :

SELECT * FROM MaTable WHERE MaCol = NULL

OPTION ( RECOMPILE )

Ou dans le cas d'une procédure stockée on ajoutera WITH RECOMPILE à sa définition.

Bonne résolution...

SQL Server : Votre serveur consomme trop de processeur, pourquoi ?

Un serveur de base de données est consommateur par essence de ressources CPU. Mais contrairement à ce que pense beaucoup de personne ce n'est généralement pas la principale ressource dont il a besoin.

A savoir que la gestion de l'exécution des requêtes par SQL Server ne suit pas le modèle de Windows. Le multitâche préemptif n'est pas le modèle idéal pour SQL Server, il lui préfère le multitâche coopératif entre ses threads. Pour cette raison le multi cœur / processeur est quasi une obligation sur ce type de serveur de base de données, mais au-delà il faut en voir les besoins.

Pour contrôler la charge processeur et les attentes liées à celle ci je vous invite à jeter un œil ici :
http://blogs.codes-sources.com/christian/archive/2007/01/11/sql-server-votre-serveur-a-t-il-un-probl-me-de-cpu.aspx

Quelles sont les principales raison d'une consommation excessive de CPU ?

Les Compilations et Recompilations

Toute requête doit être compilée en vue de son exécution. Cette phase assimilable à un algorithme de recherche de la meilleure stratégie comme dans un jeu vidéo, permet de trouver le mode d'exécution optimal de la requête. C'est une opération qui est typiquement consommatrice de processeur, et peuvent être aisément être évitées sur les requêtes exécutées fréquemment. Une requête exécutant un million d'insertion dans une table par jour est candidate à ce genre d'optimisation.

On les évite en :

==> utilisant des procédures stockées ou des requêtes paramétrées (sp_executesql et sqlCommand avec SqlParameters en Ado.net). Attention l'utilisation des ces derniers à aussi des effets pervers, comme de fausser l'exécution des requêtes lorsque que les paramètres changent beaucoup.

Les Requêtes de texte intégral

C'est une recherche qui utilise un index composé des mots extraits du texte recherché. Se rajoute à cela des règles spécifiques aux langues pour améliorer la recherche. Le principe est dès lors le même qu'un moteur de recherche type live ou google. La construction de l'index est une opération couteuse en processeur, ainsi que les requêtes quand les critères se complexifient. Bien que SQL Server 2008 améliore les performance des recherches mixtes (mi-fultext, mi relationel) ce type de requêtes nécessitent toujours des ressources importantes.

On les évite en :

==> Faisant des recherche relationnelles quand cela est possible, à base de LIKE par exemple, mais attention les index « classique » de SQL Server sont essentiellement efficace en recherchant par le début des chaînes de caractères (le LIKE '%xxx%' est très inefficace). De plus les index relationnel sont limités à 900 octets de données indexées par enregistrements.

Le parallélisme

Paralléliser la requête revient à l'exécuter sur plusieurs processeurs quand cela est possible. Le but est de réduire la durée de la requête souvent au détriment de la consommation processeur. Plus le nombre de processeur utilisé est important, plus le coût de la parallélisassions se fait ressentir.

On l'évite en :

==> Limitant le parallélisme au niveau de la requête ou au niveau du moteur de base de données.

http://blogs.codes-sources.com/christian/archive/2007/11/01/sql-server-r-gler-le-maxdop-ou-g-rer-le-parall-lisme-sur-sql-server.aspx

Les Tris et dérivés (JOIN, UNION, GROUP BY)

En dehors de la clause ORDER BY, il est tout un tas de scénario où le moteur de base de données utilise les tris, tel que pour la constitution des index, certaines jointures, etc. C'est le moteur de base de données, qui à la compilation va déterminer ce qui est le plus intéressant.

On les évite en :

==> En limitant les ORDER BY au nécessaire et en indexant convenablement les données. L'index clustered (ordonné) est le meilleur candidat à ce type d'optimisation. On le placera que les colonnes sur lesquelles se font les tris ou celles citées dans les GROUP BY. On essaiera aussi d'indexer les clefs étrangères des tables. Les vues indexées peuvent aussi se révéler une aide précieuse.

Les Requêtes traitant beaucoup de données

Même une requête renvoyant peu de données, peut se révéler être un gouffre en consommation de processeur. Un SUM sur une table comportant quelques millions d'enregistrements sera gourmande car non seulement une opération d'agrégat est à effectuer mais aussi car un grand nombre de données est à traiter. SQL Server devrait traiter toutes les pages via le processeur, même lorsque celles-ci sont déjà présentes en mémoire.

On les évite en :

==> En indexant correctement les données. Dans le cas du SUM un index seul sur cette colonne peut déjà significativement diminuer le temps de traitement. Une vue indexée sera là aussi très efficace.

Bonne optimisation . . .

SQL Server : Microsoft met à disposition un outil pour downgrader les bases de données [Poisson d'avril]

Face à la demande croissante des clients utilisant SQL Server, Microsoft à mis à disposition sur son site de téléchargement un logiciel permettant de passer d'une version x vers les 2 versions immédiatement inférieures. Cela permet de passer de SQL Server 2008 vers 2005 ou 2000, de 2000 vers la version 7.0 ou 6.5. Les versions jusqu'à la version 4.0 devraient aussi être supportées.

Un simple assistant vous invite à choisir la base de données à traiter et s'occupe de tout le reste. Les téléchargements vont bon train, et le nombre de personne l'ayant en leur possession augmente d'heure en heure.

Poisson d'avril...

Posté le par christian | 1 commentaire(s)

SQL Server : Scriptez tous les jobs d’un serveur de base de données par Management Studio

Après avoir cherché pendant longtemps comment faire une copie de mes jobs SQL Server entre 2 serveurs et sans se servir de Integration Services, j'ai enfin trouvé une manière simple de faire.

  • Ouvrez Management Studio et rendez vous dans la liste des « Jobs » dans « SQL Agent »
  • Allez dans le manu « Affichage » et choisissez « Détails de l'explorateur d'objets » (F7 dans SQL 2008)
  • Dans la fenêtre qui apparait faite une sélection des jobs à scripter
  • Cliquez avec le bouton droit puis dans le menu contextuel choissisez « Script as » / « Create To » et la cible que vous souhaitez.

Après çà vous aurez vos scripts de création de jobs. Notez que cela fonctionne aussi pour tous les autres objets dans SQL Server.

Bon scripts...

Posté le par christian | 0 commentaire(s)
Classé sous : ,
Plus de Messages Page suivante »


Les 10 derniers blogs postés

- [Refactoring] ReSharper pour Visual Studio 2010 (Preview) par Thomas Jaskula le il y a 1 heure et 6 minutes

- [Refactoring] Analyser vos exceptions avec ReSharper Exceptional par Thomas Jaskula le il y a 2 heures et 20 minutes

- SharePoint 2007 : patterns & practices SharePoint Guidance par Philippe Sentenac [MVP SharePoint] le il y a 15 heures et 59 minutes

- [Visual Studio 2010] Les tests cases c’est bien, mais je vais devoir tout réécrire ? par Etienne Margraff le il y a 16 heures et 56 minutes

- MVP[Gribouillon].AddYear par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le il y a 17 heures et 11 minutes

- Clinique INSIA - Projet de fin d’Etudes (Silverlight 3 MVVM et OutOfBrowser, WCF, TFS) - Part 1 par David REI le 07-02-2009, 23:38

- C’est la crise ? Bah pourquoi cramer du budget pub alors ? par Nix's Blog le 07-02-2009, 15:31

- Soyons MVP ! par TheSaib .NET blog le 07-02-2009, 12:15

- SharePoint : Gestion des Erreurs 6398, 7076 et 6482 par Blog Technique de Romelard Fabrice le 07-02-2009, 11:53

- EF avec WPF par Matthieu MEZIL le 07-02-2009, 10:18