suchen
HeimDatenbankMySQL-Tutorialgather_plan_statistics查看sql的join部分的内存消耗

遇见一个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的响应时间。

Stellungnahme
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
Mysqls Platz: Datenbanken und ProgrammierungMysqls Platz: Datenbanken und ProgrammierungApr 13, 2025 am 12:18 AM

Die Position von MySQL in Datenbanken und Programmierung ist sehr wichtig. Es handelt sich um ein Open -Source -Verwaltungssystem für relationale Datenbankverwaltung, das in verschiedenen Anwendungsszenarien häufig verwendet wird. 1) MySQL bietet effiziente Datenspeicher-, Organisations- und Abruffunktionen und unterstützt Systeme für Web-, Mobil- und Unternehmensebene. 2) Es verwendet eine Client-Server-Architektur, unterstützt mehrere Speichermotoren und Indexoptimierung. 3) Zu den grundlegenden Verwendungen gehören das Erstellen von Tabellen und das Einfügen von Daten, und erweiterte Verwendungen beinhalten Multi-Table-Verknüpfungen und komplexe Abfragen. 4) Häufig gestellte Fragen wie SQL -Syntaxfehler und Leistungsprobleme können durch den Befehl erklären und langsam abfragen. 5) Die Leistungsoptimierungsmethoden umfassen die rationale Verwendung von Indizes, eine optimierte Abfrage und die Verwendung von Caches. Zu den Best Practices gehört die Verwendung von Transaktionen und vorbereiteten Staten

MySQL: Von kleinen Unternehmen bis zu großen UnternehmenMySQL: Von kleinen Unternehmen bis zu großen UnternehmenApr 13, 2025 am 12:17 AM

MySQL ist für kleine und große Unternehmen geeignet. 1) Kleinunternehmen können MySQL für das grundlegende Datenmanagement verwenden, z. B. das Speichern von Kundeninformationen. 2) Große Unternehmen können MySQL verwenden, um massive Daten und komplexe Geschäftslogik zu verarbeiten, um die Abfrageleistung und die Transaktionsverarbeitung zu optimieren.

Was liest Phantom und wie verhindert InnoDB sie (Sperren des nächsten Schlägers)?Was liest Phantom und wie verhindert InnoDB sie (Sperren des nächsten Schlägers)?Apr 13, 2025 am 12:16 AM

InnoDB verhindert effektiv das Phantom-Lesen durch den Mechanismus für den nächsten Kleien. 1) Nächstschlüsselmesser kombiniert Zeilensperr- und Gap-Sperre, um Datensätze und deren Lücken zu sperren, um zu verhindern, dass neue Datensätze eingefügt werden. 2) In praktischen Anwendungen kann durch Optimierung der Abfragen und Anpassung der Isolationsstufen die Verringerungswettbewerb reduziert und die Gleichzeitleistung verbessert werden.

MySQL: Keine Programmiersprache, sondern ...MySQL: Keine Programmiersprache, sondern ...Apr 13, 2025 am 12:03 AM

MySQL ist keine Programmiersprache, aber seine Abfragesprache SQL hat die Eigenschaften einer Programmiersprache: 1. SQL unterstützt bedingte Beurteilung, Schleifen und variable Operationen; 2. Durch gespeicherte Prozeduren, Auslöser und Funktionen können Benutzer komplexe logische Operationen in der Datenbank ausführen.

MySQL: Eine Einführung in die beliebteste Datenbank der WeltMySQL: Eine Einführung in die beliebteste Datenbank der WeltApr 12, 2025 am 12:18 AM

MySQL ist ein Open Source Relational Database Management -System, das hauptsächlich zum schnellen und zuverlässigen Speicher und Abrufen von Daten verwendet wird. Sein Arbeitsprinzip umfasst Kundenanfragen, Abfragebedingungen, Ausführung von Abfragen und Rückgabergebnissen. Beispiele für die Nutzung sind das Erstellen von Tabellen, das Einsetzen und Abfragen von Daten sowie erweiterte Funktionen wie Join -Operationen. Häufige Fehler umfassen SQL -Syntax, Datentypen und Berechtigungen sowie Optimierungsvorschläge umfassen die Verwendung von Indizes, optimierte Abfragen und die Partitionierung von Tabellen.

Die Bedeutung von MySQL: Datenspeicherung und -verwaltungDie Bedeutung von MySQL: Datenspeicherung und -verwaltungApr 12, 2025 am 12:18 AM

MySQL ist ein Open Source Relational Database Management -System, das für Datenspeicher, Verwaltung, Abfrage und Sicherheit geeignet ist. 1. Es unterstützt eine Vielzahl von Betriebssystemen und wird in Webanwendungen und anderen Feldern häufig verwendet. 2. Durch die Client-Server-Architektur und verschiedene Speichermotoren verarbeitet MySQL Daten effizient. 3. Die grundlegende Verwendung umfasst das Erstellen von Datenbanken und Tabellen, das Einfügen, Abfragen und Aktualisieren von Daten. 4. Fortgeschrittene Verwendung beinhaltet komplexe Abfragen und gespeicherte Verfahren. 5. Häufige Fehler können durch die Erklärungserklärung debuggen. 6. Die Leistungsoptimierung umfasst die rationale Verwendung von Indizes und optimierte Abfrageanweisungen.

Warum MySQL verwenden? Vorteile und VorteileWarum MySQL verwenden? Vorteile und VorteileApr 12, 2025 am 12:17 AM

MySQL wird für seine Leistung, Zuverlässigkeit, Benutzerfreundlichkeit und Unterstützung der Gemeinschaft ausgewählt. 1.MYSQL bietet effiziente Datenspeicher- und Abruffunktionen, die mehrere Datentypen und erweiterte Abfragevorgänge unterstützen. 2. Übernehmen Sie die Architektur der Client-Server und mehrere Speichermotoren, um die Transaktion und die Abfrageoptimierung zu unterstützen. 3. Einfach zu bedienend unterstützt eine Vielzahl von Betriebssystemen und Programmiersprachen. V.

Beschreiben Sie InnoDB-Verriegelungsmechanismen (gemeinsame Schlösser, exklusive Schlösser, Absichtssperrungen, Aufzeichnungsschlösser, Lückensperrungen, Sperren der nächsten Schlüsse).Beschreiben Sie InnoDB-Verriegelungsmechanismen (gemeinsame Schlösser, exklusive Schlösser, Absichtssperrungen, Aufzeichnungsschlösser, Lückensperrungen, Sperren der nächsten Schlüsse).Apr 12, 2025 am 12:16 AM

Zu den Verriegelungsmechanismen von InnoDB gehören gemeinsame Schlösser, exklusive Schlösser, Absichtsschlösser, Aufzeichnungsschlösser, Lückensperrungen und nächste Schlüsselschlösser. 1. Shared Lock ermöglicht es Transaktionen, Daten zu lesen, ohne dass andere Transaktionen lesen. 2. Exklusives Schloss verhindert, dass andere Transaktionen Daten lesen und ändern. 3.. Intention Lock optimiert die Sperreffizienz. 4. Rekord -Sperr -Indexdatensatz. 5. Gap Lock Locks Index -Aufzeichnungslücke. 6. Die nächste Schlüsselsperrung ist eine Kombination aus Datensatzsperr- und Lückensperrung, um die Datenkonsistenz zu gewährleisten.

See all articles

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 vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung