Base de données interne médiocre - la remplace-t-elle ou utilise-t-elle du matériel?


39

Nous avons donc une base de données interne à l'entreprise, le type habituel de choses: gestion des clients, appels téléphoniques, contrats de vente et accords / schémas clients.

Il s’agit d’un serveur Access 2000 et d’un serveur SQL Server 2000 Standard. Un serveur unique, double Xeon à 3,2 GHz, 2 Go de RAM, Windows Server 2003, reçoit environ 40% de la charge du processeur toute la journée, répartie sur les 4 cœurs visibles du système d'exploitation (HT).

La base de données back-end est mal conçue et a connu une croissance organique de plus de 10 ans, maintenue par des personnes peu qualifiées. Il est mal normalisé et certains des problèmes les plus évidents concernent les tables avec des dizaines de milliers de lignes sans clé primaire ni index, qui sont également très utilisées dans les jointures multi-tables pour certaines des parties les plus utilisées du système (par exemple, une gestionnaire d'appels qui se trouve sur le deuxième moniteur de tout le monde pendant 8 heures par jour et lance une grosse requête inefficace toutes les quelques secondes).

Le front-end n’est pas bien meilleur, c’est le fouillis typique de centaines de formulaires, de requêtes sauvegardées imbriquées, de code SQL incorporé mal écrit dans le code VBA, de dizaines de "bizarreries", etc., et chaque fois qu’une modification est apportée, quelque chose de non lié semble se briser. Nous avons opté pour une BMD qui fonctionne "assez bien" et avons maintenant une politique de non-changement à ce sujet, car nous n'avons pas de poids lourd Access à l'interne (et ne prévoyons pas en engager un non plus).

La société est en train de croître lentement, avec un nombre croissant de clients, d'appels, etc., ainsi qu'une augmentation modeste du nombre d'utilisateurs simultanés, et les performances se sont nettement dégradées ces derniers temps (attente de passer d'un formulaire à l'autre, attente de listes à remplir, etc.). )

Perfmon dit:

  • Transferts de disque par seconde: entre 0 et 30, moyenne 4.
  • Longueur de la file d'attente actuelle: oscille autour de 1

Le profileur de SQL Server voit des centaines de milliers de requêtes chaque minute. L'utilisation du processeur sur les clients est pratiquement nulle, ce qui indique qu'il attend que les requêtes côté serveur soient exécutées. J'ai chargé cette charge de travail via l'assistant de paramétrage du moteur DB, appliqué ses suggestions à une sauvegarde test, mais cela ne faisait pas vraiment une grande différence.

En passant, nous avons un mélange de 100 Mo et d’Ethernet gigabit, le tout sur un seul sous-réseau, 40 utilisateurs ISH sur deux étages.

À la question.

À mon avis, nous avons deux choix pour résoudre / améliorer cette situation.

  • Nous pouvons le supprimer et le remplacer par un tout nouveau système de gestion de la relation client, sur mesure ou en partie sur mesure.
  • Nous pouvons prolonger la durée de vie de ce système en y insérant du matériel.

Nous pouvons construire un système Intel i7 avec des performances incroyables pour un ordre de grandeur moins coûteux que le remplacement du logiciel.

Lorsqu'un nouveau système est finalement développé, il peut être hébergé sur cette boîte, évitant ainsi le gaspillage de matériel. Un nouveau système de gestion de la relation client est de plus en plus utilisé, et cela ne se produira pas avant au moins un an.

Toute pensée sur cette situation, surtout si vous avez été ici vous-même, serait très appréciée.

Merci


6
+1 pour la description et le contenu. C’est quelque chose que nous voyons tous quotidiennement.
Dayton Brown

Pareil ici. Excellente question.
Joseph Kern

1
la sortie de DTA ne signifie pas que vous avez atteint la limite d'optimisation de la base de données à effectuer. Faites appel à un spécialiste SQL Server! Ils peuvent faire des merveilles et redonner à votre matériel existant quelques années de vie
Nick Kavadias

Réponses:


20

Je vais être en désaccord avec tout le monde ici. Chuck du matériel à elle. C'est bon marché, rapide, facile et vous fera gagner le temps nécessaire pour mettre en œuvre une solution CRM adéquate. La raison pour laquelle je préconise quelque chose qui est anathème pour à peu près tout le monde sur ce forum, mais également sur stackoverflow, c’est que j’ai été chef de projet / manager et que je suis du côté "Entreprises" depuis un certain temps est entre guillemets en raison de ma haine pour le mot). Selon votre description du logiciel, il vous faudra presque un an pour reconstruire autre chose. Le simple fait de découvrir / documenter les règles commerciales / bizarreries prendra probablement deux mois. Il sera également incroyablement coûteux à développer. Surtout par rapport au coût d'un serveur piégé.

En fait, je suis sur le point d'héberger un ensemble d'applications Web pour une entreprise pour cette raison. Le service informatique interne ne le fera pas passer à un meilleur matériel, car il souhaite le réaménager sur une nouvelle plate-forme. Ce coût est environ le triple de ce qu'il en coûterait pour le transférer sur du nouveau matériel. Ne mentionnez pas trop que l'entreprise pourrait ne pas avoir le contrat renouvelé dans un an.


Sa question était "NewHardware OR NewCRM" et non "NewHardware AND NewCRM" ... Et vraiment, vous n'allez pas à l'encontre du conseil d'administration (achetez un nouveau CRM), vous ne faites que reformuler la question (passer de OU à AND).
Joseph Kern

Quelques autres commentaires ici disent "Faites les deux". S'il fait les deux, alors il n'y a vraiment aucune question. Mais peut-il se permettre de faire les deux?
Joseph Kern

Joseph, j'ai répondu ci-dessous dans son intégralité, mais - Un nouveau matériel, une mise à niveau vers des éditions de serveur plus récentes, PLUS l'optimisation de certaines requêtes et l'ajout d'index seront probablement les plus efficaces. Vous ne voulez pas donner l'avantage concurrentiel que les CRM personnalisés donnent aux petites entreprises en croissance.
Karl Katzke

My Do Both, si vous le lisez, conservez le matériel tout en le retravaillant. En fonction des ressources dont il a besoin, il peut s’agir de quelques centaines de dollars en RAM lors de la refactorisation d’une partie de celle-ci. Montrer les problèmes qu’il avait rencontrés avec le démanteler et aller de l’avant avec un tout nouveau système, qu’il s’agisse d’un système écrit sur mesure ou de la clé en main.
SpaceManSpiff

+1 pour avoir une vue d'ensemble: cela coûtera moins cher de lancer du matériel que de jeter les développeurs / l'informatique. À moins que vous ne trouviez un CRM standard offrant tout ce dont vous avez besoin, qui coûte moins cher que le serveur et qui ne mettra pas beaucoup de temps à migrer, c'est-à-dire.
Ernie

14

Vous pourriez ne pas avoir besoin de faire non plus. Ma suggestion est simplement d'ajouter quelques index / clés à la table.

tables avec des dizaines de milliers de lignes sans clé primaire ni index, qui sont également fortement utilisées dans les jointures multi-tables

Avant de dépenser beaucoup d'argent ou de temps, prenez quelques heures et ajoutez des index (ou des clés primaires si vous le pouvez) à toutes les tables impliquées dans ces jointures ... en particulier pour les colonnes utilisées dans une clause where. Vous pouvez facilement améliorer les performances d'un facteur 10 en quelques heures seulement.


3
+1 ou un facteur de 100 - les indices appropriés ne doivent pas être sous-estimés ...
Oskar Duveborn

8

L'absence d'E / S de disque implique que les requêtes sont alimentées principalement en RAM. Si «soudainement» vos tables chaudes ne tiennent plus dans la RAM et que le serveur commence à faire fonctionner les disques, vous risquez d'être pris au piège. 2 Go ou RAM n'est pas beaucoup ces jours-ci, mais à l'époque SQL2000, il aurait été considérable. J'imagine que la quantité de données que l'application manipule normalement est plus petite que la RAM dont vous disposez. Vous voudrez peut-être examiner la quantité d'espace "utilisé" dans les fichiers de données. Cela vous donnera une idée de la quantité de RAM que la base de données pourrait consommer, dans le pire des cas. SQL Server ne conserve pas dans la mémoire vive les données dont il n'a pas besoin, mais il peut être difficile de savoir quelles tables sont utilisées et à quel moment.

L'hyperthreading n'est pas toujours utile avec SQL Server. Vous obtiendrez peut-être de meilleures performances si vous le désactivez. C'est difficile à tester, car l'activation / désactivation nécessite un redémarrage, ce qui représente un gros problème pour un serveur de production.

"Des centaines de milliers de requêtes par minute" se traduit par des milliers de requêtes par seconde. Cela semble assez occupé, mais une grande partie de ce trafic peut n'être que des extractions de curseur par Access. L'accès est particulièrement difficile pour récupérer efficacement des jeux de résultats à partir de SQL. Vous pouvez obtenir de meilleures performances en désactivant le paramètre de parallélisation de SQL Server.

Vous souhaitez également rechercher le blocage. Lancer le matériel sur un problème de blocage ne produit pas toujours l'amélioration spectaculaire espérée. S'il n'y a pas beaucoup de blocage et que les requêtes satisfont à la RAM plutôt qu'au disque, vous vous fiez essentiellement au grognement du processeur et à sa capacité à extraire les données des canaux de mémoire. Dans ce cas, un matériel plus rapide devrait fournir une bonne amélioration. Si vous êtes pressé (pour surmonter ce problème) et que vous grandissez lentement, cela pourrait suffire.

En tant que solution, l’ajout de matériel n’est pas aussi évolutif que les améliorations apportées à la base de données. Si votre croissance s'accélère, vous constaterez peut-être que votre nouveau matériel est en difficulté. Une autre idée est que les applications réussies attirent les utilisateurs. Si l'application devient plus réactive, les utilisateurs risquent davantage de générer davantage de rapports que s'ils le faisaient s'ils voulaient prendre un café en attendant la fin du rapport.

Si le schéma de base de données est vraiment mauvais, vous pourrez peut-être obtenir des gains de performance simplement en regardant l'indexation sur les tables. Concentrez-vous sur les tables que vous savez souvent interrogées. Vous pouvez utiliser Profiler pour regarder les requêtes s'exécutant sur le serveur. Il vous suffit de lui demander de rechercher les requêtes lisant beaucoup de données (environ 100 000 pages), puis de réduire le nombre de requêtes lues peu. Vous avez mentionné que certaines des tables n'ont pas de clés. Y a-t-il des clés naturelles dans les données, qui ne sont simplement pas imposées par des contraintes ou des index uniques?

Les tables ont-elles des index clusterisés? L'absence d'indexation en cluster peut avoir toutes sortes d'effets secondaires.

Existe-t-il de nombreux index non clusterisés, comportant de nombreuses colonnes? Il s'agit souvent d'une tentative de construction de nombreux index de couverture, plutôt que de mettre en œuvre une stratégie d'indexation plus efficace. SQL Server peut efficacement créer des index de couverture à la volée lors d’une requête, s’il est logique de le faire et que des index non clusterisés et en cluster prennent en charge.

Enfin, il convient de se demander si la maintenance (réindexation et / ou mise à jour des statistiques) est effectuée sur les tables?


Essayez de trouver des colonnes dans les tables fréquemment utilisées pour indexer correctement. Avec un peu de chance, il pourrait être facile et rapide de le corriger. Sinon, le peu de temps passé ne devrait pas être trop coûteux si vous ou tout autre DBA / DBA L'entrepreneur doit abandonner et passer à autre chose plus tôt s'il ne semble pas y avoir de
solution miracle

L'accès n'est pas "particulièrement difficile à récupérer efficacement à partir de jeux de résultats à partir de SQL" sauf si l'application a été mal conçue. Jet / ACE peut faire de mauvaises hypothèses lorsqu'il envoie des demandes à SQL Server. L'une d'elles est que Jet / ACE décompose une mise à jour par lot en une seule UPDATE par ligne. C’est terrible du point de vue des performances, mais nous essayons d’être un bon citoyen serveur, car cela permet au serveur de sérialiser et d’entrelacer les requêtes avec celles d’autres utilisateurs, au lieu de tout bloquer avec une longue mise à jour. Cela peut être contourné en déplaçant le côté serveur d’exploitation vers un SPROC.
David W. Fenton

La majorité des applications d'accès que je vois ne sont pas conçues, elles se produisent et évoluent ensuite de manière «organique». J'ai été victime de la récupération par Access de jeux de résultats volumineux, ligne par ligne, du trafic réseau et de la latence associés à un tel comportement, tant de fois que j'ai arrêté de compter. Je ne suis pas tout à fait sûr que cela n'ait pas été corrigé avec les versions modernes d'Access pouvant utiliser quelque chose comme SNAC plutôt que Jet / Ace ou si cela pourrait être corrigé par des codeurs Access plus avertis, mais c'est quelque chose qui J'ai vu souvent.
détroit de darin

6

Il s’agit d’une question commerciale et non technique.

En tant que propriétaire d'entreprise: le système est-il stratégique pour l'entreprise? Le moins stratégique, le moins que je me soucie et fixer et l'argent dépensé, est l'argent que je pourrais utiliser ailleurs pour développer mon entreprise.

Les informaticiens me font peur quand ils se retrouvent tous dans une grande pièce et discutent du design et me coûtent une fortune. Gardez le système en marche! Qu'il s'agisse d'optimiser les performances (sans ré-architecture) ou de lancer plus de matériel, c'est une priorité si cela ne fonctionne plus.

En tant que consultant informatique: votre système est hérité et présente des coûts opérationnels masqués. Nous pouvons concevoir un système qui vous convient, qui évoluera et fournira une plate-forme pour une croissance future et un avantage stratégique. Signez ici et tous vos rêves deviendront réalité.

En tant qu'informaticien: je peux être le super-héros ici et sauver la société en évitant un désastre imminent en optimisant l'enfer de cette affaire! mon directeur me couvrira de cadeaux et de louanges car j'aurai sauvé des milliers de personnes.


2
+1 pour être drôle en répondant à la question.
Ernie

2

Je dis faire les deux.

En ce moment, votre processeur à 40% ou plus vous avez dit? Êtes-vous déjà plaint (beaucoup) de l'utilisateur? Sinon, vous avez encore une marge de manœuvre. Plus de mémoire pourrait suffire à le faire pendant un moment.

Question sur le chemin à suivre, avez-vous des développeurs de logiciels internes? Si la réponse est NON, alors n'essayez même pas de le refaire. Vous allez vous retrouver exactement où vous êtes maintenant.

En supposant que vous ayez des développeurs internes, vos développeurs internes ont-ils la capacité de réaliser correctement un projet? Je parle complètement, chronologiquement, de la même manière que s’il s’agissait d’un projet client. Si ce n'est pas le cas, ne vous embêtez pas ou cela finira par revenir là où vous êtes maintenant.

Tant que les entreprises ne se rendent pas compte qu'elles sont également leurs propres clients et doivent donner les mêmes ressources aux projets internes, vous vous retrouverez exactement là où vous en êtes. Je suis allé là-bas, j'ai eu toute une commode de t-shirts.

Donc, si vous ne pouvez pas le faire correctement, vous avez deux choix: clé en main, vous détesterez le personnel, car ils doivent maintenant s'adapter au moule du système que vous achetez. Ou il sera personnalisable et vous devrez toujours passer du temps sur PROJECT pour le personnaliser.

OU refacturez ce que vous avez. Rappelez-vous que les gens s'attendent à ce que toutes les fonctionnalités soient complètes lorsque le nouveau arrive, c'est pourquoi vous devez tout faire en même temps. Si vous le re-factorisez, vous avez une chance de comprendre comment cela fonctionne et ensuite, plutôt que de faire des changements ad-hoc, vous le planifiez dans de nombreux petits sous-projets.

Sans voir le système, je penserais probablement à normaliser autant que possible dans le back-end, à transférer autant de code SQL dans les processus stockés. Ensuite, créez un nouveau frontal à partir de C # Forms ou d’une webapp. Si vous pouvez obtenir votre logique métier et votre code SQL dès le départ, il sera plus facile de le refaire ultérieurement. En gardant ce que vous faites pour les petits projets, si cela est mis de côté à tout moment ou arrêté, vous aurez réalisé des progrès qui seront utilisés.


2

Quelques bonnes réponses ici déjà, mais permettez-moi simplement de souligner que (en supposant qu'il y ait des développeurs internes), un travail relativement peu important aura un impact important: ajoutez des clés primaires (vous ne devriez même pas avoir à modifier toutes vos requêtes en utilisez-les), ajoutez des index aux champs que vous utilisez, ajustez un peu vos requêtes et vous constaterez une augmentation absolument énorme. Achetez-vous un peu de RAM pour le moment pour acheter le temps et la marge de sécurité dont vous avez besoin pour le réparer, puis pour vous mettre au travail.

En ce qui concerne "corrigez-le ou abandonnez-le", si les fonctionnalités du système fonctionnent pour vous et font ce dont vous avez besoin, ne réécrivez pas la roue. Si vos utilisateurs doivent faire de la gymnastique pour utiliser la chose parce que cela ne correspond pas à vos besoins, il ne sert à rien de faire un effort.


2

Eh bien ... cela fait un moment maintenant, mais je pensais enregistrer le résultat ici.

À la fin, j’ai parcouru VBA ligne par ligne pour régler un autre problème. C'est alors que j'ai réalisé que certains appels d'extraction de lignes bloquaient pendant plus de 20-30 secondes.

Quand j'ai creusé dans eux, j'ai constaté que le jeu de lignes était basé sur une requête MS Access.

C'était sélectionner des données à partir d'une autre requête Access.

Cela consistait à sélectionner des données à partir d'une autre requête Access.

Tous semblaient avoir été glissés et lâchés ensemble à l'aide du concepteur de requêtes.

J'ai parcouru la demi-douzaine de points de douleur des utilisateurs et constaté que ceux-ci étaient tous identiques.

J'ai donc entièrement supprimé les piles de requêtes chaînées et les ai toutes remplacées par une requête unique, qui pouvait être écrite en T-SQL et exécutée directement sur le serveur.

L’amélioration était absolue dans tous les cas et il n’y avait plus aucune attente de requêtes pour qui que ce soit.

Et puis j'ai quitté l'entreprise. Aucune idée si c'est toujours là ... mais ça ne me manque pas.


Il n'y a rien de fondamentalement faux avec les requêtes imbriquées. Et, en fait, ce qui compte vraiment, ce n'est pas ce qui se trouve dans les QueryDefs source dans Access, mais ce que Jet / ACE envoie au serveur, ce que vous pouvez trouver en utilisant SQL Profiler. Oui, il est possible d'écrire des requêtes incorrectes dans Access qui sont inefficaces et ralentissent le processus, mais c'est possible dans toutes les bases de données!
David W. Fenton

1

Je poste une réponse séparée au lieu de simplement ajouter une réponse à la réponse de Dayton, car les premières personnes qui ont envoyé une réponse ne tiennent pas compte de ce coût: le coût de la reconversion des utilisateurs et le coût de la modification de vos procédures métier un nouveau logiciel. Sinon, ce qu'il a dit.

L'une des principales raisons pour lesquelles les entreprises développent leurs propres logiciels est que leurs procédures commerciales ne correspondent pas à ce qui existe sur le marché. Ce qui est formidable: les procédures commerciales individuelles d’une entreprise constituent une part importante de la valeur qu’elle apporte et constituent l’avantage concurrentiel qu’elle possède par rapport au reste de son marché. Pour remplacer le logiciel par quelque chose de générique, vous devrez recycler votre personnel et sacrifier votre avantage concurrentiel, ou vous devrez personnaliser la solution en fonction de vos processus métier. Les deux sont chers et prennent du temps. En tant que consultant d’entreprise et administrateur système, j’ai vu ces coûts tuer les petites entreprises elles-mêmes.

D'après vos déclarations, il semble que vous soyez plutôt lié au logiciel / processeur. Je ferais deux choses - ajouter des index (dans les limites), en particulier aux colonnes qui ne les utilisent pas actuellement. Et je choisirais le processeur le plus rapide qui soit, car il semble que ce soit là où vous êtes contraignant si vous n'avez pas autant de lecteurs lus à la pointe.

(En outre, je mettrais à niveau l'édition du serveur autant que possible - au moment où vous l'aurez mise en place, Access 2000 et SQL Server 2000 auront dix ans. C'est vieux en années d'ordinateur!)


1

Cela nécessite une restructuration complète (re-architecture). Reconstruisez le système à partir de la base. Cela vous épargnera beaucoup à long terme (frais généraux de maintenance). Pour le moment, le matériel de serrage est là. Je pense que cette question est davantage une "analyse de rentabilisation" qu'une enquête technique. D'un point de vue technique, la réponse est un pur "accordez plus de puissance". Sur le plan commercial, construisez un nouveau système!


1

Réponse technique:

Vous avez un nombre de suggestions concernant les clés primaires et l'indexation doit être examinée de manière approfondie. Access aime également utiliser une colonne SQL Server TimeStamp ou RowVersion sur chaque table, car cela réduit considérablement le temps nécessaire à Access pour décider si un enregistrement a été modifié lors de la mise à jour des enregistrements.

Réponse d'affaires:

Une nouvelle solution de gestion de la relation client nécessite beaucoup de formation et vous ne vous retrouverez jamais avec un système parfaitement adapté à vos besoins.

Je trouverais une bonne personne d’accès qui est également très informée sur SQL Server et la ferais passer 3 ou 6 mois à normaliser les tables et à régler les problèmes des utilisateurs. Assurez-vous que cette personne travaille sur les étages saem en tant qu'utilisateur, bien que dans un espace calme et accessible. Bien que pas trop accessible. Les développeurs n'aiment pas les interruptions. S


Ce qu'il a dit - à mon avis, le plus rentable, c'est d'ajouter d'abord les index, puis de lancer le matériel, puis de faire appel à un développeur Access de niveau expert de l'extérieur pour analyser l'application et déterminer les goulets d'étranglement. sont. Cela pourrait très bien être quelque chose de très simple, mais mon pari est que le gourou de l'accès pourrait faire le travail à propos du coût (ou moins) du matériel du serveur haut de gamme.
David W. Fenton

0

Sur la base des informations fournies, je remplacerais le système. De préférence avec un autre CRM qui permet une intégration flexible avec d’autres systèmes (ce qui compromettrait votre IS ERP ).

La partie la plus délicate sera de convaincre la direction et les utilisateurs d’avoir besoin d’une mise à niveau.

La gestion

Exprimez vos préoccupations concernant les problèmes techniques, les faibles performances, la crainte des défaillances byzantines, etc. Ensuite, présentez 2 CRM alternatifs. Parlez de l'intégration commerciale, de la stratégie ERP globale de l'entreprise et, plus important encore, de la manière dont elle permettra aux employés d'être plus productifs et plus rentables. Utilisez des études de cas. Ne faites pas plus de 15 minutes (à moins qu'ils ne souhaitent plus d'informations) .Vous devez ensuite convaincre les utilisateurs.

Utilisateurs

Plans de formation (qu'un fournisseur peut fournir [et que la direction devrait approuver]), communication continue avec les 20% de vos utilisateurs les plus performants (utilisateurs chevronnés, sources de problèmes) et ferme volonté de maintenir le système à 100% opérationnel pour le premier mois (le premier mois fera ou cassera tout nouvel IS).

Il existe de nombreux produits de CRM, choisissez-en un qui répond le mieux aux besoins de votre entreprise.


0

L'utilisation de matériel ne fait qu'encourager une conception et une gestion plus médiocres, jusqu'à ce que le système soit si pathétique qu'il ne fonctionne pas bien, même avec le matériel le plus récent et le plus performant. Il est temps de chercher une meilleure mise en œuvre. D'abord, analysez ce qui est requis. Ce n'est que lorsque vous comprenez parfaitement les exigences que vous pouvez commencer à chercher la meilleure façon de les mettre en œuvre. Une fois que vous êtes certain de comprendre les exigences, commencez par vous demander s'il est préférable de modifier ce que vous avez ou de commencer à partir de zéro, éventuellement avec quelque chose de complètement différent.


0

À long terme, vous feriez probablement mieux de refaire la base de données. Lancer plus de matériel dessus résoudra votre problème pendant un petit moment, mais si vous continuez à l'utiliser, vous allez avoir à lancer plus de matériel après un certain temps.

En règle générale, lorsque vous rencontrez des problèmes de performances, vous examinez des problèmes tels que les goulets d'étranglement des entrées / sorties sur les disques durs / RAID, le partage de la base de données, etc. À partir de là, votre application ne pourra jamais évoluer.

À long terme, refaire la base de données et le logiciel frontal afin de mieux refléter les besoins actuels de votre entreprise vous servira mieux à long terme. Vos utilisateurs vous remercieront, votre matériel durera plus longtemps et vous permettra d'économiser beaucoup plus d'argent à long terme que de lancer un matériel gigantesque sur le sujet.


0

Compte tenu de votre description, la création d’un tout nouveau système sur mesure est inutile: vous allez vous retrouver exactement comme vous avez commencé, ou peut-être même dans une situation pire que celle que vous êtes maintenant. Par conséquent, à moins que vous ne puissiez convaincre quelqu'un d'acheter une solution tierce, votre meilleur choix est de procéder à une refactorisation du mieux que vous pouvez et de lui lancer du matériel.

Je dirais que vous devriez faire deux choses: 1) L'analyse des performances sur le serveur SQL. Vous semblez avoir identifié le côté serveur comme étant la source des décalages. Vous devez donc maintenant savoir quelles requêtes sont en retard et pourquoi. Il est fort probable que vous puissiez optimiser certaines requêtes de points chauds qui vous apporteraient de gros avantages. Heck, si vous avez des clients qui mettent à jour toutes les quelques secondes, voyez si vous pouvez baisser leur vitesse de mise à jour (La liste à l'écran doit-elle VRAIMENT mettre à jour toutes les 5 secondes? Est-ce que 30 serait OK? Sinon, environ 15? ). Des trucs idiots comme augmenter le temps d'actualisation pourraient vous faire économiser beaucoup de temps, si vous pouviez vous en tirer.

2) Jetez plus de matériel à elle. Surtout jetez des quantités massives de bélier dessus. Vous voulez tellement de mémoire que la base de données est entièrement logée dans la RAM. Gardez un œil sur les versions de votre système d’exploitation et de vos logiciels (il existe apparemment beaucoup de règles concernant les versions de Windows et le matériel qu’elles prennent en charge). Si vous pouvez vous convaincre que plus de cœurs aideraient, lancez autant de processeurs et de cœurs que possible.


0

Vous avez mentionné la RAM et les processeurs, mais pas les disques. J'admets que cela fait presque dix ans que j'ai traité avec SQL Server de MS, mais il est lié aux disques tout autant que toute autre base de données, s'il ne peut pas tout contenir en mémoire.

J'essaierais probablement d'abord de remplir la machine avec autant de RAM que nécessaire, puis je m'assurerais que les journaux sont en cours d'écriture sur des disques qui ne sont pas utilisés pour des tables ou des index. J'essaierais alors de m'assurer qu'aucune table n'a ses index sur le même axe.

Après cela, je m'inquiéterais du réglage du niveau de la base de données, mais avec cela, vous allez devoir définir vos tests et un objectif d'optimisation pour ne pas casser des choses ou aggraver les requêtes. Bien que vous ayez dit que les clés primaires ne présentaient pas beaucoup d'avantages dans votre base de données de test, vous devriez examiner votre méthodologie de test - les clés primaires peuvent autoriser certaines bases de données (ne sachant pas si MS SQL est l'une d'entre elles) à utiliser le verrouillage du niveau d'enregistrement. , plutôt que des verrous au niveau de la table, ce qui peut réduire les conflits qui pourraient ne pas apparaître lors des tests avec seulement quelques utilisateurs.


0

Tout d'abord, je suis d'accord avec Kyle Hodgson et j'ajoute des PK. Ce n'est pas cher (temps seulement) et vous pourriez voir un coup de pouce sur vos requêtes. Qu'en est-il des index sur les colonnes de jointure dans vos 10 requêtes les plus laides? Où sont les scans de la table?

Deuxièmement, qu'en est-il du découpage des données dans la base de données? Le nombre de lignes renvoyées dans les requêtes est-il supérieur au nombre réellement nécessaire? Je suis également d'accord avec la suggestion de Kyle en matière de RAM (deux autres Go).

Mettez tout cela dans votre rédaction (Joseph Kern) sur ce que vous proposez comme intérimaire tout en préparant l'avenir. Demandez à la direction et aux utilisateurs ce qu’il advient de l’organisation si l’application CRM actuelle cratère et n’est pas disponible. Cela les aidera peut-être à réfléchir à l’avenir.


0

Obtenez le matériel!

Si vous optez pour une puce de la série Xeon 55xx, cela vous coûtera très cher tout ce que vous pourrez faire.

C'est juste une question de risque / récompense - vous pouvez dépenser de l'argent et beaucoup de temps pour améliorer la DB ou acheter votre moyen de transport plus rapidement et moins cher.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.