Maison base de données tutoriel mysql SQL SERVER 查询性能优化分析事务与锁(四)

SQL SERVER 查询性能优化分析事务与锁(四)

Jun 07, 2016 pm 05:44 PM
server 事务 优化 分析 性能 查询

上接SQL SERVER 查询性能优化分析事务与锁(三) 二、死锁的原因及相关处理 死锁的原因很多,尤其是前端应用程序没有合理的使用事务,或者对错误处理不当而导致事务长期持有而没有关闭。接下来讲讲最常见的几种死锁情况,并提供可能的解决方法。 1.费时的查

上接SQL SERVER 查询性能优化——分析事务与锁(三)

 

二、死锁的原因及相关处理

       死锁的原因很多,尤其是前端应用程序没有合理的使用事务,或者对错误处理不当而导致事务长期持有而没有关闭。接下来讲讲最常见的几种死锁情况,网站空间,并提供可能的解决方法。

1.费时的查询事务

2.不正确的事务或事务隔离等级设置

3.事务未正确处理

4.未检测到的分布式死锁

5.锁定数据粒度太高或太低

6.Compile Blocking

 

  (一)费时的查询事务

。如下图。

 

 

 

 

”锁住,也可以从“等待类型”列中看出相关信息。

如下图1、图2。

 

图1

 

图2

 

 

建议解决方法

1.新增或设置适当的索引以增加查询速度

2.更新统计信息以避免执行计划使用旧的统计信息

3.重新设计数据表、存储过程等对象

4.检查是否过度使用触发器和游标。

如果无法通过以上方式提高 工作效率,则可能要考虑修改系统的工作流程

1. 分割工作,不要同时执行所有的需求

2. 切割工作时间,将工作排至系统不繁忙的时段执行

3. 切割工作属性,将工作交给另一个数据库去执行,把查询与更新分成两个数据库来执行。

 

 

(二)不正确的事务或事务隔离级别设置

 

建议解决方式:

       事务设置大多与实际业务逻辑有关,不容易界定是否有必要,如果你通过跟踪文件找到不正确的事务或事略等级隔离设置时,也需要与开发者讨论设置的必要性。尤其是当事务中包含大量数据的运算的情况,可能需要研究如何切割成较小的事务,但仍需要符合原来的数据完整性和业务逻辑要求。

 

 

(三)事务未正确处理

 

 

 

在SQL 2005(2008)执行代码示例一,得到如下图。

 

select spid 进程,STATUS 状态, 登录帐号=SUBSTRING(SUSER_SNAME(sid),1,30) ,用户机器名称=SUBSTRING(hostname,1,12) ,是否被锁住=convert(char(3),blocked) ,数据库名称=SUBSTRING(db_name(dbid),1,20),cmd 命令,waittype as 等待类型 ,last_batch 最后批处理时间,open_tran 未提交事务的数量 from master.sys.sysprocesses spid in (select blocked from master.sys.sysprocesses) and blocked=0 ,香港空间,美国空间

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1663
14
Tutoriel PHP
1264
29
Tutoriel C#
1237
24
Inversion des valeurs clés du tableau PHP : analyse comparative des performances de différentes méthodes Inversion des valeurs clés du tableau PHP : analyse comparative des performances de différentes méthodes May 03, 2024 pm 09:03 PM

La comparaison des performances des méthodes de retournement des valeurs de clé de tableau PHP montre que la fonction array_flip() fonctionne mieux que la boucle for dans les grands tableaux (plus d'un million d'éléments) et prend moins de temps. La méthode de la boucle for consistant à retourner manuellement les valeurs clés prend un temps relativement long.

Comparaison des performances de différents frameworks Java Comparaison des performances de différents frameworks Java Jun 05, 2024 pm 07:14 PM

Comparaison des performances de différents frameworks Java : Traitement des requêtes API REST : Vert.x est le meilleur, avec un taux de requêtes de 2 fois SpringBoot et 3 fois Dropwizard. Requête de base de données : HibernateORM de SpringBoot est meilleur que l'ORM de Vert.x et Dropwizard. Opérations de mise en cache : le client Hazelcast de Vert.x est supérieur aux mécanismes de mise en cache de SpringBoot et Dropwizard. Cadre approprié : choisissez en fonction des exigences de l'application. Vert.x convient aux services Web hautes performances, SpringBoot convient aux applications gourmandes en données et Dropwizard convient à l'architecture de microservices.

Optimisation des programmes C++ : techniques de réduction de la complexité temporelle Optimisation des programmes C++ : techniques de réduction de la complexité temporelle Jun 01, 2024 am 11:19 AM

La complexité temporelle mesure le temps d'exécution d'un algorithme par rapport à la taille de l'entrée. Les conseils pour réduire la complexité temporelle des programmes C++ incluent : le choix des conteneurs appropriés (tels que vecteur, liste) pour optimiser le stockage et la gestion des données. Utilisez des algorithmes efficaces tels que le tri rapide pour réduire le temps de calcul. Éliminez les opérations multiples pour réduire le double comptage. Utilisez des branches conditionnelles pour éviter les calculs inutiles. Optimisez la recherche linéaire en utilisant des algorithmes plus rapides tels que la recherche binaire.

Comment optimiser les performances des programmes multi-thread en C++ ? Comment optimiser les performances des programmes multi-thread en C++ ? Jun 05, 2024 pm 02:04 PM

Les techniques efficaces pour optimiser les performances multithread C++ incluent la limitation du nombre de threads pour éviter les conflits de ressources. Utilisez des verrous mutex légers pour réduire les conflits. Optimisez la portée du verrou et minimisez le temps d’attente. Utilisez des structures de données sans verrouillage pour améliorer la simultanéité. Évitez les attentes occupées et informez les threads de la disponibilité des ressources via des événements.

Quel est l'impact sur les performances de la conversion de tableaux PHP en objets ? Quel est l'impact sur les performances de la conversion de tableaux PHP en objets ? Apr 30, 2024 am 08:39 AM

En PHP, la conversion de tableaux en objets aura un impact sur les performances, principalement affecté par des facteurs tels que la taille du tableau, la complexité, la classe d'objet, etc. Pour optimiser les performances, envisagez d'utiliser des itérateurs personnalisés, en évitant les conversions inutiles, les tableaux de conversion par lots et d'autres techniques.

Quelle est la performance des générateurs de nombres aléatoires dans Golang ? Quelle est la performance des générateurs de nombres aléatoires dans Golang ? Jun 01, 2024 pm 09:15 PM

La meilleure façon de générer des nombres aléatoires dans Go dépend du niveau de sécurité requis par votre application. Faible sécurité : utilisez le package math/rand pour générer des nombres pseudo-aléatoires, adaptés à la plupart des applications. Haute sécurité : utilisez le package crypto/rand pour générer des octets aléatoires cryptographiquement sécurisés, adaptés aux applications qui nécessitent un caractère aléatoire plus élevé.

Comparaison des performances des frameworks Java Comparaison des performances des frameworks Java Jun 04, 2024 pm 03:56 PM

Selon les benchmarks, pour les petites applications hautes performances, Quarkus (démarrage rapide, mémoire faible) ou Micronaut (TechEmpower excellent) sont des choix idéaux. SpringBoot convient aux grandes applications full-stack, mais a des temps de démarrage et une utilisation de la mémoire légèrement plus lents.

Quels sont les moyens de résoudre les inefficacités des fonctions PHP ? Quels sont les moyens de résoudre les inefficacités des fonctions PHP ? May 02, 2024 pm 01:48 PM

Cinq façons d'optimiser l'efficacité des fonctions PHP : évitez la copie inutile de variables. Utilisez des références pour éviter la copie de variables. Évitez les appels de fonction répétés. Fonctions simples en ligne. Optimisation des boucles à l'aide de tableaux.

See all articles