Question

J'ai une application Web dans laquelle la base de données Web Server et SQL Server 2008 repose sur des boîtes différentes dans la même ferme serveur.

Si je prends une procédure stockée monolithique et que je romps dans plusieurs PROC stockés plus petits, ce qui rend le code client responsable des appels vers plusieurs procédures stockées au lieu d'un seul, et je vais remarquer une performance significative mon application Web?


Info de fond supplémentaire:

J'ai une procédure stockée avec plusieurs centaines de lignes de code contenant la logique de décision, les états de mise à jour et enfin une instruction SELECT qui renvoie un ensemble de données au client.

J'ai besoin d'insérer un morceau de fonctionnalité dans mon code client (en ce sens, le code client est le serveur Web ASP qui appelle le serveur de base de données) qui appelle une DLL de composant. Toutefois, la procédure stockée met à jour un jeu d'enregistrements et renvoie les données UDPATE dans le même appel, et mon code doit idéalement être appelé après les états de la logique de décision et de mise à jour sont appelés, mais avant < / em> les données sont renvoyées au client.

Pour que cette fonctionnalité fonctionne, je vais probablement avoir à fractionner la PROP stockée existante en au moins deux parties: un descs stockés qui met à jour la base de données et une autre qui récupère les données de la base de données. J'insérerais alors mon nouveau code entre ces appels de la procédure stockée.

Quand je regarde ce problème, je ne peux pas m'empêcher de penser que, d'un point de vue de la maintenance du code, il serait beaucoup mieux d'isoler tous de ma mise à jour et de sélectionner des déclarations en mince Procs stockés et laissez la logique commerciale au code du client. De cette façon, chaque fois que je dois insérer une fonctionnalité ou une logique de décision dans mon code client, tout ce que je dois faire est de modifier le code client au lieu de modifier un énorme procédé stocké.

Bien que l'utilisation de PROC dimensionnés de la vue de maintien de la vue, une douleur à la main-d'œuvre sera-t-elle meilleure, quelle que soit la douleur de la performance que je ferai de l'expérience en augmentant le nombre de voyages dans la base de données? Le résultat net aux données est le même, mais je touche la base de données plus fréquemment. Comment cette approche a-t-elle une incidence sur les performances lorsque l'application est mise à la hauteur de la demande?

Je ne suis pas un pour placer une optimisation de la performance au-dessus de tout le reste, en particulier lorsqu'il affecte la maintenance du code, mais je ne veux pas me tirer dessus dans le pied et créer des maux de tête lorsque l'application Web doit être à l'échelle.

Était-ce utile?

La solution

en général, en règle générale, vous devez effectuer des arrondies sur SQL Server au minimum.

Le "Hit" sur le serveur est très coûteux, il est effectivement plus cher de dévier la même opération en 3 parties, puis de 1 coup et tout le reste sur le serveur.

En ce qui concerne la maintenance, vous pouvez appeler le 1 PROC stocké du client, la présence de ce processus d'appeler un autre Proc.

J'ai eu une application avec la logique de recherche extrême, c'est ce que j'ai fait pour la mettre en œuvre.

Certains résultats d'analyse comparative ... J'avais un client un client à l'arrière qui avait des serveurs qui tombaient et s'effondrent, lorsque nous avons vérifié le problème, il s'agissait de nombreuses demi-arrivées sur SQL Server, lorsque nous le minimisons, les serveurs sont revenus à la normale.

Autres conseils

Cela l'affectera.Nous utilisons un serveur WebLogic dans lequel toute la logique Business est dans Appserver connecté à une base de données DB / 2.Nous utilisons surtout des haricots d'entité dans notre projet et pour la plupart des appels de services aux entreprises font plusieurs voyages à la DB sans effets secondaires visibles.(Nous ajustons certaines requêtes pour être multi-table en cas de besoin).

Cela dépend vraiment de votre application.Vous allez avoir besoin de repère.

Un serveur SQL Setup de puits sur le bon matériel peut traiter plusieurs milliers de transactions par seconde.

En effet, une grande procédure stockée peut être bénéfique, car vous ne pouvez avoir qu'un seul plan de requête en cache par lot.Briser plusieurs lots signifie qu'ils obtiendront chacun leur propre plan de requête.

Vous devez certainement vous tromper du côté de la maintenance du code, mais de la référence pour être sûr.

Étant donné que le plan du plan de requête chnage, vous devriez être prêt à mettre à jour vos index, créant peut-être différents index de couverture.

Essentiellement, cette question est étroitement liée à un couplage étanche vs lâche.

Au début: vous pouvez toujours prendre la procédure stockée monolithique et le casser dans plusieurs PROC stockés plus petits, qui sont tous appelés par une procédure stockée , rendant ainsi le code client uniquement responsable de l'appelantune procédure stockée.

Sauf si le client fera quelque chose (modifier les données ou fournir un statut à l'utilisateur) Je ne recommanderais probablement pas de déplacer plusieurs appels au client, car vous coupliez plus étroitement le client à l'ordre des opérations pour la procédure stockée sansune augmentation significative des performances.

De toute façon, je l'asseyerait et s'adapterais de là.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top