Maison base de données tutoriel mysql gather_plan_statistics查看sql的join部分的内存消耗

gather_plan_statistics查看sql的join部分的内存消耗

Jun 07, 2016 pm 04:40 PM
sql 查看

遇见一个sql语句,感觉驱动表的顺序选择有问题,就倒腾了一会儿,具体的sql语句如下,这里推荐使用gather_plan_statistics来查看具体的每个执行计划消耗的IO资源、执行时间、预估和实际返回的rows。 SQL_ID dq4pj5cnn0gb8, child number 0 -----------------

遇见一个sql语句,感觉驱动表的顺序选择有问题,就倒腾了一会儿,具体的sql语句如下,这里推荐使用gather_plan_statistics来查看具体的每个执行计划消耗的IO资源、执行时间、预估和实际返回的rows。

SQL_ID  dq4pj5cnn0gb8, child number 0
-------------------------------------
select /*+ gather_plan_statistics*/a.SERVNUMBER, a.REGION   from
tbcs.SUBS_USEDTEL a, tbcs.CS_SUBS_SERVNUMBER_TRANS b  where a.SUBSID =
b.TRANSIN_SUBSID    and a.REGION = b.TRANSIN_REGION    and a.INTIME >
sysdate - 90    and a.RECDEFID in ('DropSubs', 'FraudDropSubs')    and
a.REGION = 20
 
Plan hash value: 2146127278
 
-----------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation               | Name                     | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
-----------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT        |                          |      1 |        |    100 |00:00:01.08 |   19453 |       |       |          |
|*  1 |  HASH JOIN              |                          |      1 |   4749 |    100 |00:00:01.08 |   19453 |    24M|  3319K|   25M (0)|
|   2 |   PARTITION RANGE SINGLE|                          |      1 |   4749 |    374K|00:00:00.83 |   17257 |       |       |          |
|*  3 |    TABLE ACCESS FULL    | SUBS_USEDTEL             |      1 |   4749 |    374K|00:00:00.66 |   17257 |       |       |          |
|*  4 |   TABLE ACCESS FULL     | CS_SUBS_SERVNUMBER_TRANS |      1 |  13477 |   8795 |00:00:00.05 |    2196 |       |       |          |
-----------------------------------------------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   1 - access("A"."SUBSID"="B"."TRANSIN_SUBSID" AND "A"."REGION"="B"."TRANSIN_REGION")
   3 - filter(("A"."REGION"=20 AND INTERNAL_FUNCTION("A"."RECDEFID") AND "A"."INTIME">SYSDATE@!-90))
   4 - filter("B"."TRANSIN_REGION"=20)

这里cbo在执行计划3中预估SUBS_USEDTEL通过谓词条件返回的数据只有4749,而实际返回了374K数据,初步来看这个sql应该交换下驱动表的顺序,让CS_SUBS_SERVNUMBER_TRANS去做驱动表。

SQL_ID  8px917y6cub58, child number 0
-------------------------------------
select /*+ gather_plan_statistics leading(b a) */
 a.SERVNUMBER, a.REGION
  from tbcs.SUBS_USEDTEL a, tbcs.CS_SUBS_SERVNUMBER_TRANS b
 where a.SUBSID = b.TRANSIN_SUBSID
   and a.REGION = b.TRANSIN_REGION
   and a.INTIME > sysdate - 90
   and a.RECDEFID in ('DropSubs', 'FraudDropSubs')
   and a.REGION = 20
 
Plan hash value: 2680037744
 
-----------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation               | Name                     | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
-----------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT        |                          |      1 |        |    346 |00:00:00.66 |   20281 |       |       |          |
|*  1 |  HASH JOIN              |                          |      1 |   4749 |    346 |00:00:00.66 |   20281 |  1998K|  1998K| 2083K (0)|
|*  2 |   TABLE ACCESS FULL     | CS_SUBS_SERVNUMBER_TRANS |      1 |  13477 |  14135 |00:00:00.06 |    3024 |       |       |          |
|   3 |   PARTITION RANGE SINGLE|                          |      1 |   4749 |    374K|00:00:00.78 |   17257 |       |       |          |
|*  4 |    TABLE ACCESS FULL    | SUBS_USEDTEL             |      1 |   4749 |    374K|00:00:00.61 |   17257 |       |       |          |
-----------------------------------------------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   1 - access("A"."SUBSID"="B"."TRANSIN_SUBSID" AND "A"."REGION"="B"."TRANSIN_REGION")
   2 - filter("B"."TRANSIN_REGION"=20)
   4 - filter(("A"."REGION"=20 AND INTERNAL_FUNCTION("A"."RECDEFID") AND "A"."INTIME">SYSDATE@!-90))

我们添加了hint lleading(b a)强制指定关联顺序,在整个sql消耗的逻辑读其实是没多大的变化,其实这里主要需要普及的一个知识点就是hash join的关联cbo是不会计算到逻辑读的。

那么这两个sql好像IO成本每多大的变化啊,但是我们观察OMem、1Mem、Used-Mem三项是有显著变化的,这里简单解释下这三个指标的信息
OMem为最优执行模式所需的内存评估值
1Mem为one-pass模式所需的内存评估值
Used-Mem则为实际执行时消耗的内存,而且我们还看见25M (0)和2083K (0)都有一个括号0,这个表示该sql是最优执行模式执行的

可以看出制定了正确的驱动表可以大幅度的减轻系统的内存消耗,这里也提供了我们一个思路就是优化sql时不能仅仅去关注IO资源,还要关注下内存的消耗,通过gather_plan_statistics可以很直观的观察到sql执行时join关联部分的内存消耗,

oracle官当对于memstats的解释(allstats=iostats+memstats的组合):

?MEMSTATS – Assuming that PGA memory management is enabled (that is,pga_aggregate_target parameter is set to a non 0 value), this format allows to display memory management statistics (for example, execution mode of the operator, how much memory was used, number of bytes spilled to disk, and so on). These statistics only apply to memory intensive operations like hash-joins, sort or some bitmap operators.

这个used-men和v$sql或者v$sqlarea的视图记录内存消耗的列是不相同的,used-mem是执行sql部分join消耗的pga内存部分,而v$sql或者v$sqlarea记录的是cursor的信息

sharable_mem:Amount of shared memory used by a cursor. If multiple child cursors exist, then the sum of all shared memory used by all child cursors.
persistent_mem:Fixed amount of memory used for the lifetime of an open cursor. If multiple child cursors exist, then the fixed sum of memory used for the
lifetime of all the child cursors.
runtime_mem:Fixed amount of memory required during execution of a cursor. If multiple child cursors exist, then the fixed sum of all memory required
during execution of all the child cursors.

这里我们需要注意的时优化sql时不能仅仅只是以逻辑读去衡量某个sql的性能,对于用户而言我们肯定是最关注sql的响应时间,我们优化IO、减少内存和cpu消耗等都是为了让执行sql时做尽可能少的事情,进而提高sql的响应时间。

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

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

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)

Quelle est la différence entre HQL et SQL dans le framework Hibernate ? Quelle est la différence entre HQL et SQL dans le framework Hibernate ? Apr 17, 2024 pm 02:57 PM

HQL et SQL sont comparés dans le framework Hibernate : HQL (1. Syntaxe orientée objet, 2. Requêtes indépendantes de la base de données, 3. Sécurité des types), tandis que SQL exploite directement la base de données (1. Normes indépendantes de la base de données, 2. Exécutable complexe requêtes et manipulation de données).

Découvrez les étapes pour supprimer un appareil connecté sur Douyin Découvrez les étapes pour supprimer un appareil connecté sur Douyin Mar 26, 2024 am 09:01 AM

1. Tout d'abord, cliquez pour ouvrir l'application Douyin et cliquez sur [Moi]. 2. Cliquez sur l'icône à trois points dans le coin supérieur droit. 3. Cliquez pour accéder aux [Paramètres]. 4. Cliquez pour ouvrir [Compte et sécurité]. 5. Sélectionnez et cliquez sur [Connexion à la gestion des appareils]. 6. Enfin, cliquez pour sélectionner le périphérique et cliquez sur [Supprimer].

Comment vérifier votre propre identifiant sur Xianyu_Introduction à la façon de vérifier votre pseudo personnel sur Xianyu Comment vérifier votre propre identifiant sur Xianyu_Introduction à la façon de vérifier votre pseudo personnel sur Xianyu Mar 22, 2024 am 08:21 AM

En tant que plateforme de trading, Xianyu vous demande de vous inscrire et de vous connecter à votre compte avant de l'utiliser. Les utilisateurs peuvent définir un nom d'identification pour leur compte. Et s'ils souhaitent vérifier quel est leur identifiant ? Découvrons ensemble ci-dessous ! Une introduction à la façon de vérifier votre pseudo personnel sur Xianyu. Tout d'abord, démarrez l'application Xianyu. Après être entré sur la page d'accueil, passez à la page de vente d'inactivité, de messages et de moi, et cliquez sur l'option [Mon] dans le coin inférieur droit. 2. Ensuite, sur ma page, nous devons cliquer sur [Avatar] dans le coin supérieur gauche ; 2. Ensuite, lorsque nous accédons à la page d'accueil personnelle, nous pouvons voir différentes informations. Nous devons cliquer sur le bouton [Modifier les informations] ici ; 4. Enfin, cliquez sur Nous pourrons le voir plus tard sur la page où nous modifions les informations ;

Où vérifier les classements musicaux sur NetEase Cloud Music_Comment vérifier les classements musicaux sur NetEase Cloud Music Où vérifier les classements musicaux sur NetEase Cloud Music_Comment vérifier les classements musicaux sur NetEase Cloud Music Mar 25, 2024 am 11:40 AM

1. Après avoir allumé le téléphone, sélectionnez NetEase Cloud Music. 2. Après avoir accédé à la page d'accueil, vous pouvez voir la [Liste de classement] et cliquer pour entrer. 3. Dans la liste de classement, vous pouvez sélectionner n'importe quelle liste et cliquer sur [Nouvelle liste de chansons]. 4. Sélectionnez votre chanson préférée et cliquez dessus. 5. Revenez à la page précédente pour voir plus de listes.

Comment afficher la liste chaude des vidéos Kuaishou Live Companion Comment afficher la liste chaude des vidéos Kuaishou Live Companion Mar 29, 2024 pm 08:09 PM

Kuaishou Live Companion n'est pas seulement un puissant outil auxiliaire de diffusion en direct, mais également une plate-forme d'informations en temps réel sur les sujets d'actualité et les tendances créées pour les diffuseurs. Grâce à cette fonction, les présentateurs peuvent rapidement capturer le contenu qui préoccupe le plus le public, puis ajuster le contenu en direct pour le rendre plus conforme aux goûts et aux intérêts du public. Alors, comment vérifier la liste des vidéos populaires dans l'application Kuaishou Live Companion ? Ce guide didacticiel vous fournira une introduction détaillée aux étapes. J'espère qu'il pourra vous aider. Comment afficher la liste des vidéos chaudes sur Kuaishou Live Companion ? La deuxième étape consiste à cliquer sur la liste des vidéos chaudes quotidiennes. La troisième étape consiste à consulter la liste des vidéos préférées quotidiennes.

Comment vérifier le nombre de groupes que vous avez rejoint sur WeChat : une étape simple Comment vérifier le nombre de groupes que vous avez rejoint sur WeChat : une étape simple Mar 26, 2024 am 10:06 AM

Indépendamment de la vie ou du travail, de nombreuses personnes sont depuis longtemps profondément liées à WeChat et seront à tout moment intégrées à divers groupes. Alors, combien de groupes WeChat avez-vous rejoints ? Vous souhaiterez peut-être immédiatement afficher les discussions de groupe dans votre carnet d'adresses, mais seuls les groupes WeChat que vous avez enregistrés dans votre carnet d'adresses y apparaîtront et les autres groupes ne seront pas visibles. Si vous souhaitez voir tous les groupes WeChat que vous avez rejoints, c'est très simple : entrez votre pseudo dans le champ de recherche de la page d'accueil de WeChat, puis recherchez la section de discussion de groupe dans les résultats de recherche, et cliquez sur « Plus de discussions de groupe » pour afficher toutes les informations liées aux discussions de groupe. Quoi qu'il en soit, j'ai été choqué. Il y en avait plus d'une centaine et la barre de défilement à droite est devenue très petite. Malheureusement, il n'y a pas de statistiques numériques spécifiques... Cette méthode est également applicable pour vérifier les groupes QQ que vous avez rejoints. PS : Certains internautes ont également proposé une astuce :

Comment vérifier les groupes que j'ai rejoints Comment vérifier les groupes que j'ai rejoints Apr 01, 2024 pm 05:34 PM

Le chat de groupe WeChat n'est pas seulement une simple plateforme de chat, mais aussi un cercle de communication qui rassemble des élites et des amis enthousiastes de tous horizons. Aujourd'hui, je vais donc vous apprendre à vérifier le nombre de groupes que vous avez ajoutés sur WeChat et à les enregistrer. discussions de groupe. Habituellement, les utilisateurs qui utilisent WeChat ne doivent pas le manquer. Comment vérifier le nombre de groupes que vous avez ajoutés à WeChat et comment enregistrer les discussions de groupe Pour vérifier le nombre de groupes que vous avez ajoutés à WeChat : 1. Vous pouvez afficher la fenêtre de votre discussion de groupe dans l'interface principale de WeChat 2. Si vous avez déjà enregistré le discussion de groupe, vous pouvez appuyer sur [ Carnet d'adresses] - [Chat de groupe] 3. Après avoir accédé à la discussion de groupe, vous pouvez afficher le groupe enregistré. Enregistrez le groupe WeChat : 1. Sélectionnez le groupe que vous souhaitez enregistrer, en haut à droite [.. .] 2. Ouvrez dans le message de discussion [Enregistrer dans le carnet d'adresses] 3. Sur l'interface principale de WeChat, appuyez sur [Carnet d'adresses]-[Group Chat] pour afficher

Comment afficher le centre d'aide Amap_Comment afficher le centre d'aide Amap Comment afficher le centre d'aide Amap_Comment afficher le centre d'aide Amap Apr 01, 2024 pm 05:26 PM

1. Nous ouvrons d'abord la carte Gaode. 2. Cliquez ensuite sur (Mon) dans le coin inférieur droit de la page d'accueil d'Amap, puis cliquez sur Paramètres dans le coin supérieur droit. 3. Enfin, vous pouvez voir le centre d'aide d'Amap.

See all articles