Heim Datenbank MySQL-Tutorial 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的响应时间。

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist der Unterschied zwischen HQL und SQL im Hibernate-Framework? Was ist der Unterschied zwischen HQL und SQL im Hibernate-Framework? Apr 17, 2024 pm 02:57 PM

HQL und SQL werden im Hibernate-Framework verglichen: HQL (1. Objektorientierte Syntax, 2. Datenbankunabhängige Abfragen, 3. Typsicherheit), während SQL die Datenbank direkt betreibt (1. Datenbankunabhängige Standards, 2. Komplexe ausführbare Datei). Abfragen und Datenmanipulation).

Sehen Sie sich die Schritte zum Löschen eines angemeldeten Geräts auf Douyin an Sehen Sie sich die Schritte zum Löschen eines angemeldeten Geräts auf Douyin an Mar 26, 2024 am 09:01 AM

1. Öffnen Sie zunächst die Douyin-App und klicken Sie auf [Ich]. 2. Klicken Sie auf das Dreipunktsymbol in der oberen rechten Ecke. 3. Klicken Sie, um [Einstellungen] aufzurufen. 4. Klicken Sie, um [Konto und Sicherheit] zu öffnen. 5. Wählen Sie [Bei der Geräteverwaltung anmelden] aus und klicken Sie darauf. 6. Klicken Sie abschließend auf das Gerät, um es auszuwählen, und klicken Sie auf [Entfernen].

So überprüfen Sie Ihren eigenen Ausweis auf Xianyu_Einführung, wie Sie Ihren persönlichen Spitznamen auf Xianyu überprüfen können So überprüfen Sie Ihren eigenen Ausweis auf Xianyu_Einführung, wie Sie Ihren persönlichen Spitznamen auf Xianyu überprüfen können Mar 22, 2024 am 08:21 AM

Als Handelsplattform müssen Sie sich bei Xianyu registrieren und anmelden, bevor Sie es nutzen können. Was ist, wenn Sie überprüfen möchten, wie ihre ID lautet? Finden wir es unten gemeinsam heraus! Eine Einführung zum Überprüfen Ihres persönlichen Spitznamens auf Xianyu. Starten Sie zunächst die Xianyu-App. Wechseln Sie nach dem Aufrufen der Startseite zur Seite „Leerlauf“, „Nachrichten“ und „Ich“ und klicken Sie in der unteren rechten Ecke auf die Option „Mein“. 2. Dann müssen wir auf meiner Seite in der oberen linken Ecke auf [Avatar] klicken. 2. Wenn wir dann zur persönlichen Startseite gehen, müssen wir hier auf die Schaltfläche [Informationen bearbeiten] klicken. 4. Klicken Sie abschließend auf Wir können es später auf der Seite sehen, auf der wir Informationen bearbeiten;

Wo kann man die Musik-Rankings auf NetEase Cloud Music überprüfen? So überprüfen Sie die Musik-Rankings auf NetEase Cloud Music Wo kann man die Musik-Rankings auf NetEase Cloud Music überprüfen? So überprüfen Sie die Musik-Rankings auf NetEase Cloud Music Mar 25, 2024 am 11:40 AM

1. Wählen Sie nach dem Einschalten des Telefons NetEase Cloud Music aus. 2. Nachdem Sie die Homepage aufgerufen haben, können Sie die [Rangliste] sehen und zum Betreten klicken. 3. In der Rangliste können Sie eine beliebige Liste auswählen und auf [Neue Songliste] klicken. 4. Wählen Sie Ihr Lieblingslied aus und klicken Sie darauf. 5. Kehren Sie zur vorherigen Seite zurück, um weitere Listen anzuzeigen.

So zeigen Sie die heiße Liste der Kuaishou Live Companion-Videos an So zeigen Sie die heiße Liste der Kuaishou Live Companion-Videos an Mar 29, 2024 pm 08:09 PM

Kuaishou Live Companion ist nicht nur ein leistungsstarkes Hilfstool für Live-Übertragungen, sondern auch eine Echtzeit-Einblicksplattform für aktuelle Themen und Trends, die für Rundfunkveranstalter erstellt wurde. Mit dieser Funktion können Moderatoren schnell die Inhalte erfassen, die dem Publikum am meisten am Herzen liegen, und dann die Live-Inhalte anpassen, um sie besser an den Geschmack und die Interessen des Publikums anzupassen. Wie kann ich die Hot-Video-Liste in der Kuaishou Live Companion-App überprüfen? Ich hoffe, dass diese Anleitung Ihnen eine detaillierte Einführung bietet. Wie kann ich die Hot-Video-Liste auf Kuaishou Live Companion anzeigen? Der zweite Schritt besteht darin, auf die tägliche Video-Hot-Liste zu klicken. Der dritte Schritt besteht darin, die tägliche Video-Hotlist zu überprüfen.

So überprüfen Sie, wie vielen Gruppen Sie auf WeChat beigetreten sind: ein einfacher Schritt So überprüfen Sie, wie vielen Gruppen Sie auf WeChat beigetreten sind: ein einfacher Schritt Mar 26, 2024 am 10:06 AM

Unabhängig von Leben oder Beruf sind viele Menschen seit langem eng mit WeChat verbunden und werden jederzeit in verschiedene Gruppen hineingezogen. Wie vielen WeChat-Gruppen sind Sie also beigetreten? Möglicherweise möchten Sie die Gruppenchats sofort in Ihrem Adressbuch anzeigen, dort werden jedoch nur die WeChat-Gruppen angezeigt, die Sie in Ihrem Adressbuch gespeichert haben, andere Gruppen sind nicht sichtbar. Wenn Sie alle WeChat-Gruppen sehen möchten, denen Sie beigetreten sind, ist das ganz einfach: Geben Sie Ihren Spitznamen in das Suchfeld auf der WeChat-Startseite ein, suchen Sie dann den Gruppenchat-Bereich in den Suchergebnissen und klicken Sie zum Anzeigen auf „Weitere Gruppenchats“. alle zugehörigen Gruppenchat-Informationen. Wie auch immer, ich war schockiert. Es waren mehr als hundert und die Bildlaufleiste auf der rechten Seite wurde sehr klein. Leider gibt es keine spezifischen Zahlenstatistiken... Diese Methode ist auch auf die Überprüfung der QQ-Gruppen anwendbar, denen Sie beigetreten sind. PS: Einige Internetnutzer haben auch einen Trick bereitgestellt:

Wie überprüfe ich, welchen Gruppen ich beigetreten bin? Wie überprüfe ich, welchen Gruppen ich beigetreten bin? Apr 01, 2024 pm 05:34 PM

Der WeChat-Gruppenchat ist nicht nur eine einfache Chat-Plattform, sondern auch ein Kommunikationskreis, der Eliten und begeisterte Freunde aus allen Lebensbereichen zusammenbringt. Deshalb werde ich Ihnen heute beibringen, wie Sie überprüfen, wie viele Gruppen Sie auf WeChat hinzugefügt haben, und wie Sie speichern können Normalerweise dürfen Benutzer, die WeChat nutzen, es nicht verpassen. So überprüfen Sie, wie viele Gruppen Sie zu WeChat hinzugefügt haben und wie Sie Gruppenchats speichern. So überprüfen Sie, wie viele Gruppen Sie zu WeChat hinzugefügt haben: 1. Sie können Ihr Gruppenchat-Fenster in der WeChat-Hauptoberfläche anzeigen. 2. Wenn Sie dies bereits gespeichert haben Im Gruppenchat können Sie auf [Adressbuch] – [Gruppenchat] tippen. 3. Nachdem Sie den Gruppenchat aufgerufen haben, können Sie die gespeicherte Gruppe anzeigen. Speichern Sie die WeChat-Gruppe: 1. Wählen Sie oben rechts die Gruppe aus, die Sie speichern möchten. .] 2. Öffnen Sie in der Chat-Nachricht [Im Adressbuch speichern] 3. Tippen Sie auf der WeChat-Hauptoberfläche zum Anzeigen auf [Adressbuch]-[Gruppenchat].

So zeigen Sie das Amap-Hilfecenter an_So zeigen Sie das Amap-Hilfecenter an So zeigen Sie das Amap-Hilfecenter an_So zeigen Sie das Amap-Hilfecenter an Apr 01, 2024 pm 05:26 PM

1. Wir öffnen zunächst die Gaode-Karte. 2. Klicken Sie dann unten rechts auf der Amap-Startseite auf (Mein) und dann oben rechts auf Einstellungen. 3. Schließlich können Sie das Hilfecenter von Amap sehen.

See all articles