MOON
Server: Apache
System: Linux vps.erhabenn.com.br 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64
User: sonne (1011)
PHP: 8.2.31
Disabled: NONE
Upload Files
File: //usr/lib/mysqlsh/plugins/debug/__pycache__/sql_collector.cpython-39.pyc
a

��kf��@s�ddlmZddlmZddlmZmZddlmZm	Z	m
Z
mZddlZddl
Z
ddlZddlZddlmZmZeejd�d	d
�Zdd�Zd
d�Zdd�ZGdd�d�Zd�ejeeed�dd�Zgfdddgddd�ejeeee	eeee
ee	eeeed�dd�Zdddd�ejeed�dd �Zddd!�ejeee	eeee d"�d#d$�Z!dddd%�ejeeeeed&�d'd(�Z"ejeeed)�d*d+�Z#d,d-d.d/�d0d/�dd1fd2d3d4d5d/�dd1fd6d7d8d9d/�dd:fd;d7d8d<d/�dd:fd=d>d?d@d/�dd1fdAd7d8dBd/�ddCfdDd>d?dEd/�ddFfdGdHdIdJd/�dKdLfdMd>d?dNd/�dKdLfdOdPdQdRd/�ddSfdTd>d?dUd/�ddSfdVdWdXdYd/�dKdZfd[d>d?d\d/�dKd]fd^d_d`dad/�dKdbfdcd-ddded/�ddffdgd3d4dhd/�ddffdidjdkdld/�ddmfdndodpdqd/�ddmfdrd>d?dsd/�ddffdtdodpdud/�ddvfdwdxdydzd/�dd{fd|d>d?d}d/�dd{fd~d7d8dd/�dd�fd�dodpd�d/�dd�fd�d>d?d�d/�dd�fgZ$Gd�d��d��Z%Gd�d��d��Z&dggfejeee'e(eee	ee	ed��	d�d��Z)dgfejeeee	ed��d�d��Z*ejeee
ed��d�d��Z+ed��d�d��Z,ejeeeed��d�d��Z-dd��ejeeed��d�d��Z.d�ejeed��d�d��Z/d�ejeed��d�d��Z0ejeeeed��d�d��Z1ejeeee d��d�d��Z2ejeeed��d�d��Z3dS)��)�	Condition)�Thread)�mysql�Error)�Callable�List�Optional�TupleN�)�
ShellExecutor�split_phases)�path�returncCstj|ttj�����d�S)N)�	date_time)�zipfile�ZipInfo�tuple�datetime�now�	timetuple)r
�r�//usr/lib/mysqlsh/plugins/debug/sql_collector.py�make_zipinfo$s
��rcCs$|�dd��dd��dd��dd�S)N� �_�:�\�/)�replace��srrr�sanitize*s���r!cCs~|durdS|dkr"t|��d�S|dkr:|dd�d�S|dkrR|dd�d�S|dkrj|dd�d	�S|dd�d
�SdS)Niz bytesi�0.2fz KiBi@z MiBlz GiBz TiB)�int)�nrrr�format_bytes0sr%cCs�|durdS|dkr$|dd�d�S|dkr<|dd�d�S|dkrT|dd�d�S|dkrl|dd�d	�S|d
kr�|d
d�d�S|dkr�|dd�d
�S|dkr�|dd�d�S|dkr�|dd�d�S|�d�SdS)NlP�9%Cr"z wl09^Q�	z dlb"�(fz hl@_-GZz mlJ)�z siʚ;z msi@Bz usi�z nsz psr)Zpicosecondsrrr�format_pico_time?s&r&c@sBeZdZdd�Zdd�Zeed�dd��Zgfeed�d	d
�Z	dS)�InstanceSessioncCs`||_|�d���\|_}d|vr0|�d�d}|�d�\}}}t|�dt|�dt|�|_dd�|�d	���D�|_d
d�|�d���D�|_	dd�|�d
���D�|_
dd�|�d���D�|_dd�|�d���D�}d|v|_d|jv|_
|j�d����rPd|_z|j�d���d|_Wn"|j�d���d|_Yn0nd|_d|_dS)Nz/select @@performance_schema <> 'OFF', @@version�-r�.i'�dcSsg|]}|d�qS�rr��.0�trrr�
<listcomp>bsz,InstanceSession.__init__.<locals>.<listcomp>z!show tables in performance_schemacSsg|]}|d�qSr+rr,rrrr/fsz!show tables in information_schemacSsg|]}|d�qSr+r�r-�rrrrr/jszshow tables in syscSsg|]}|d�qSr+rr0rrrr/mszshow tables in mysqlcSsg|]}|d�qSr+rr0rrrr/qszAselect engine from information_schema.engines where support<>'NO'Z
NDBCluster�	rpd_nodesz1show schemas like 'mysql_innodb_cluster_metadata'TzFselect instance_id from mysql_innodb_cluster_metadata.v2_this_instancez�select instance_id from mysql_innodb_cluster_metadata.instances where cast(mysql_server_uuid as binary)=cast(@@server_uuid as binary)F)�session�run_sql�	fetch_one�has_pfs�splitr#�version�	fetch_all�
pfs_tables�	is_tablesZ
sys_tables�mysql_tables�has_ndb�	has_rapid�has_innodbcluster�instance_id)�selfr3r8�a�b�cZsupported_enginesrrr�__init__Xsb�"��������
�
��
��zInstanceSession.__init__cCs|jjS�N�r3�uri�rArrr�__str__�szInstanceSession.__str__)rcCs|jjSrFrGrIrrrrH�szInstanceSession.uri)�sql�argsc
CsLz|j�||�WStyF}ztd|t|���WYd}~n
d}~00dS)NzERROR running query: )r3r4�	Exception�print�str)rArKrL�errrr4�s
zInstanceSession.run_sqlN)
�__name__�
__module__�__qualname__rErJ�propertyrOrH�listr4rrrrr'Vs
1r'�)�zf�fn�tsv_out�headercsN��fdd�}|�t|d�d��}||�Wd�n1s@0YdS)Ncs<�r|���d���D]}|�|�d��|�d�qdS)N�utf-8�
)�write�encode)�f�line�rZrYrrr]�s
zwrite_tsv.<locals>.writez.tsv�w)�openr)rWrXrYrZr]r_rrar�	write_tsv�srdTF)�as_yaml�as_tsv�filter�
formatters�
ignore_errors�include_warnings)rWrXr3�queryrLrerfrgrhrirjrc
sD�����fdd�}dd�dd���d�D��d��d7��dtj�����d�7�z|��|�}|��}
Wn,ty�}z||�WYd}~Sd}~00g}g}g}|r�g}|jD]}|�	|j
�q�|�	d	d
�|���zJt|jd�D�]6}g}|�r||�}|�sq�i}i}t
t|��D]�}||}|||j|j
<|j|j
|v�r\|||�}|�	|du�rrt|�nd�t|�tk�r�d|v�r�d|�dd
�d}|||j|j
<nBt|�ttttd�tfv�r�|||j|j
<nt|�||j|j
<�q"|�r|�	d
�|��|�	|�|�	|�q�Wn.t�yX}z||�WYd}~Sd}~00|
�r�|�d���}|�r�|�	d|i�|�r�|�	d�|D] }|�	d
�dd�|D����q��d|
�d�7�|�r�t��|�d�|�r@��t�d�d��6}|���d��|�t�|��d��Wd�n1�s60Y|S)Ncsr�rX��t�d�d��,}|���d|�d��d��Wd�n1sJ0YgStd��d|����dS)Nz.errorrbz
# �
r[zERROR: While executing "z": )rcrr]r^rN)rPr_�rXrZrirkrWrr�handle_error�s:z dump_query.<locals>.handle_error�	# Query:
rlcSsg|]}d|���qS�z#	r�r-�lrrrr/��zdump_query.<locals>.<listcomp>z#
z# Started: �# �	�NULL�"z\"z
SHOW WARNINGS�Warningsz
# WarningscSsg|]}t|��qSr)rO)r-r_rrrr/�rs�# Execution Time: z
#
)rZ�.yamlrbr[)�joinr7rr�	isoformatr4�get_execution_timerM�columns�append�column_label�iterr5�range�lenrO�typerr#�bool�floatr9rdrcrr]r^�yaml�dump_all)rWrXr3rkrLrerfrgrhrirjrnr1Zexecution_timerPZraw_outZyaml_outrYr`rD�row�entryZ	raw_entry�i�field�warningsrbr_rrmr�
dump_query�s�
��



6r�)rergri)rWrXr3c	Cst|||d|��|||d�S)Nzselect * from �rgreri)r�)rWrXr3�tablerergrirrr�
dump_tables�r��reri)rW�prefixr3�tablesrerirc	CsFi}|D]8}td|�d��t||�t|���||||d�||<q|S)N�
 - Gathering �...r�)rNr�r!)rWr�r3r�reri�infor�rrr�collect_tabless�r�)rerirj)rWr�r3�queriesrirjc
Cs�i}|D]�}t|�tur>t|�dkr2|\}	}
d}qN|\}	}
}n||d}	}
}td|	�d��z4t||�t|	���||
||||d�||	�dd�<Wqty�}z|jt	j
jfvr��WYd}~qd}~00q|S)N�r�r�)rerirjrgrr)r�rr�rNr�r!rr�coder�	ErrorCodeZER_NO_BINARY_LOGGING)
rWr�r3r�rerirjr��q�labelrkrgrPrrr�collect_queries's0�	r�)rWrXr3r�c
Cs�|�t|�d���t}|D�]\}td|�d��dd�dd�|�d�D��d}|�|�d��z�|�|�}|�d	|���d
��d��|�d�|�dd
�dd�|j	D��d�d��g}t
|jd�D]8}	tt
|	��D]&}
|	|
}|�|dur�t|�nd�q�q�d
�|�}|�|�d��d��Wqt�yt}z2|�d|�d��d��td|���WYd}~qd}~00qWd�n1�s�0YdS)Nrbz
 - Executing r�rorlcSsg|]}d|���qSrprrqrrrr/Qrsz/collect_queries_single_file.<locals>.<listcomp>r[ryz

r\rtrucSsg|]
}|j�qSr)r�)r-rDrrrr/Zrsrvz	# Error: zERROR: )rcrrNr{r7r]r^r4r}r~r�r5r�r�rrOr)
rWrXr3r�r_rkrZ�resr`r�r�r�rPrrr�collect_queries_single_fileJsH
��
��
����
r�Zhost_summaryz%{TABLE}.statement_latency DESCcCs|d|dpdS)NZstatement_latencyrr�r rPrrr�<lambda>mrsr�cCs|d|dpddkS�NZ
statementsrrr�rrrr�nrs�hostZhost_summary_by_file_ioz%{TABLE}.io_latency DESCz+(e.io_latency-IFNULL(s.io_latency, 0)) DESCcCs|d|dpddkS�NZiosrrr�rrrr�qrsZhost_summary_by_file_io_typez*%{TABLE}.host, %{TABLE}.total_latency DESCz9e.host, (e.total_latency-IFNULL(s.total_latency, 0)) DESCcCs|d|dpddkS�N�totalrrr�rrrr�trszhost,event_nameZhost_summary_by_stagescCs|d|dpddkSr�rr�rrrr�wrsZ!host_summary_by_statement_latencyz%{TABLE}.total_latency DESCz1(e.total_latency-IFNULL(s.total_latency, 0)) DESCcCs|d|dpddkSr�rr�rrrr�zrsZhost_summary_by_statement_typecCs|d|dpddkSr�rr�rrrr�}rszhost,statementZio_by_thread_by_latencycCs|d|dpddkSr�rr�rrrr��rszuser,thread_id,processlist_id�io_global_by_file_by_bytesz%{TABLE}.total DESCz!(e.total-IFNULL(s.total, 0)) DESCcCs|d|dpddkSr�rr�rrrr��rsr*�fileZio_global_by_file_by_latencycCs|d|dpddkSr�rr�rrrr��rs�io_global_by_wait_by_bytesz%{TABLE}.total_requested DESCz5(e.total_requested-IFNULL(s.total_requested, 0)) DESCcCs|d|dpddkSr�rr�rrrr��rsZ
event_nameZio_global_by_wait_by_latencycCs|d|dpddkSr�rr�rrrr��rsZschema_index_statisticszf(%{TABLE}.select_latency+%{TABLE}.insert_latency+%{TABLE}.update_latency+%{TABLE}.delete_latency) DESCz�((e.select_latency+e.insert_latency+e.update_latency+e.delete_latency)-IFNULL(s.select_latency+s.insert_latency+s.update_latency+s.delete_latency, 0)) DESCcCsH|d|d|d|d|d|d|d|dp@ddkS)NZ
rows_selectedZinsert_latencyZrows_updatedZrows_deletedZ
rows_insertedrrr�rrrr��s"��z"table_schema,table_name,index_nameZschema_table_statisticscCs|d|dpddkS)N�
total_latencyrrr�rrrr��rsztable_schema,table_nameZ#schema_tables_with_full_table_scansz%{TABLE}.rows_full_scanned DESCz9(e.rows_full_scanned-IFNULL(s.rows_full_scanned, 0)) DESCcCs|d|dpddkS)NZrows_full_scannedrrr�rrrr��rszobject_schema,object_nameZuser_summaryz9(e.statement_latency-IFNULL(s.statement_latency, 0)) DESCcCs|d|dpddkSr�rr�rrrr��rs�userZuser_summary_by_file_iocCs|d|dpddkSr�rr�rrrr��rsZuser_summary_by_file_io_typez$%{TABLE}.user, %{TABLE}.latency DESCz-e.user, (e.latency-IFNULL(s.latency, 0)) DESCcCs|d|dpddkSr�rr�rrrr��rszuser,event_nameZuser_summary_by_stagesz*%{TABLE}.user, %{TABLE}.total_latency DESCz9e.user, (e.total_latency-IFNULL(s.total_latency, 0)) DESCcCs|d|dpddkSr�rr�rrrr��rsZ!user_summary_by_statement_latencycCs|d|dpddkSr�rr�rrrr��rsZuser_summary_by_statement_typecCs|d|dpddkSr�rr�rrrr��rszuser,statementZ"wait_classes_global_by_avg_latencyzBIFNULL(%{TABLE}.total_latency / NULLIF(%{TABLE}.total, 0), 0) DESCzhIFNULL((e.total_latency-IFNULL(s.total_latency, 0)) / NULLIF((e.total - IFNULL(s.total, 0)), 0), 0) DESCcCs|d|dpddkSr�rr�rrrr��rsZevent_classZwait_classes_global_by_latencycCs|d|dpddkSr�rr�rrrr��rsZwaits_by_host_by_latencycCs|d|dpddkSr�rr�rrrr��rsz
host,eventZwaits_by_user_by_latencycCs|d|dpddkSr�rr�rrrr��rsz
user,eventZwaits_global_by_latencycCs|d|dpddkSr�rr�rrrr��rs�eventsc@sreZdZgdfeeeed�dd�Zej	ed�dd�Z
ej	ed�dd	�Zej	eed
�dd�Z
ej	ed�d
d�ZdS)�SQLExecutorT)r3�
custom_sql�allow_phasescCsX||_t|�}|s*|ds"|dr*td��g|_|D]}|j�dd�t|�D��q4dS)Nr
r�zFOption 'customSql' may not contain before:, during: or after: prefixescSsg|]\}}d|��|f�qS)Zscript_r)r-r�rKrrrr/�s�z(SQLExecutor.__init__.<locals>.<listcomp>)r3rrr�r�	enumerate)rAr3r�r�ZphasesrrrrrrE�s��zSQLExecutor.__init__�rWr�cCs4|jd}|r0td�t||�d�|j|dd�dS)NrzExecuting custom sql scriptszcustom_sql-F�ri�r�rNr�r3�rArWr�rrrrr�execute�s
�zSQLExecutor.executecCs4|jd}|r0td�t||�d�|j|dd�dS)Nrz%Executing custom 'before' sql scriptszcustom_sql-before-Fr�r�r�rrr�execute_before�s
�zSQLExecutor.execute_before�rWr��	iterationcCs:|jd}|r6td�t||�d|�d�|j|dd�dS)Nr
z/Executing custom 'during' iteration sql scriptszcustom_sql-iterationr(Fr�r�)rArWr�r�rrrrr�execute_during�s
�zSQLExecutor.execute_duringcCs4|jd}|r0td�t||�d�|j|dd�dS)Nr�z$Executing custom 'after' sql scriptszcustom_sql-after-Fr�r�r�rrr�
execute_after�s
�zSQLExecutor.execute_afterN)rQrRrSr'rrOr�rEr�ZipFiler�r�r#r�r�rrrrr��s��


r�c@s"eZdZeed�dd�Zejeed�dd�Z	ejee
d�dd	�Ze
ejeed
�dd�Z
d
d�Zejed�dd�Zejed�dd�Zdd�Zdd�Zeejed�dd�Zejed�dd�Zejeee
d�dd�Zejed�dd �Zejed�d!d"�Zejeee
d�d#d$�Zejed�d%d&�Zd'S)(�DiagnosticsSession)r3�innodb_mutexcCs�||_d|_i|_i|_i|_i|_d|_d|_||_|jj	rl|j�
d���d|_|j�
d���d|_
nd|_d|_
|jjr�dd�|j�
d���D�|_ng|_|j�
d�|j�
d	���\}}|r�|d
kr�|jj	r�d|_|j�
d�nd|_dS)
NFzFselect sys.ps_is_consumer_enabled('events_waits_history_long') = 'YES'rzpselect EXISTS(SELECT 1 FROM performance_schema.setup_instruments WHERE NAME LIKE 'memory/%' AND ENABLED = 'YES')cSsg|]}d|d�qS)zndbinfo.rrr,rrrr/sz/DiagnosticsSession.__init__.<locals>.<listcomp>zshow tables in ndbinfoz%set session group_concat_max_len=2048z%select @@sql_log_bin, @@binlog_formatZROWTzSET SESSION sql_log_bin = 0)r3�pfs_instrumentation�metrics�metrics_info�status_start�
status_end�pfs_instrumentation_changed�has_performance_analyzerr�r6r4r5�pfs_events_wait_history_long�pfs_memory_instrumentedr=r9�ndbinfo_tables�disabled_binlog)rAr3r�Zlog_binZ
binlog_formatrrrrE�sJ������
�zDiagnosticsSession.__init__)rWr�r�c
Cs�|dvsJ�|jjr8|�|�|�||�d|�d��n|dkrHtd��|�d||�|_|�||d�|jjr�td�z d	D]}|j�	|�q|d
|_
WnFty�}z.td|�d|���td
�d|_
WYd}~n
d}~00dS)N)�current�medium�fullz	-applied_r(r�zAperformance_schema is disabled, instrumentation cannot be changed�startrz. - Preparing statement performance analyzer...)�4DROP TEMPORARY TABLE IF EXISTS sys.tmp_digests_startzPCALL sys.statement_performance_analyzer('create_tmp', 'tmp_digests_start', NULL)z?CALL sys.statement_performance_analyzer('snapshot', NULL, NULL)zJCALL sys.statement_performance_analyzer('save', 'tmp_digests_start', NULL)TzError executing �: zRelated checks will be skippedF)r3r6�enable_pfs_instruments�collect_pfs_configr�fetch_statusr��collect_metricsrNr4r�rM)rArWr�r�r�rPrrrr�&s,
��
zDiagnosticsSession.startr�cCs |�|||�|�|||�dSrF)r��collect_other_stats)rArWr�r�rrr�iterateIszDiagnosticsSession.iterate)�delayrWr��iter_fncsb�����fdd�}d�_t�}t||fd��_�j���jdur^|��|��|��q:dS)Ncs||��d�_|��|��d}�jsxtd�����|d��|�|d7}t��D]}�j�d��jrZq"qZq"dS)NFrzCollecting metrics...r
zselect sleep(1))	�acquire�
end_thread�notify�releaserNr�r�r3r4)�condr�r�r�r�r�rArWrr�runloopPsz4DiagnosticsSession.start_background.<locals>.runloop)�targetrL)r�rr�threadr�r��waitr�)rAr�rWr�r�r�r�rr�r�start_backgroundMs

z#DiagnosticsSession.start_backgroundcCsd|_|j��dS)NT)r�r�r{rIrrr�stop_backgroundnsz"DiagnosticsSession.stop_backgroundr�cCs�|jjr�td�|�||�|�d||�|_|�||�dD]}|j�|�q<|jr�t	||�d�|jddd�dD]}|j�|�qr|�
||�dS)	Nz( - Writing delta of collected metrics...�end)z-CALL sys.ps_statement_avg_latency_histogram()z%-statement_performance_analyzer-deltaziCALL sys.statement_performance_analyzer('delta', 'tmp_digests_start', 'with_runtimes_in_95th_percentile')F�re)r�z>CALL sys.statement_performance_analyzer('cleanup', NULL, NULL))r3r6rN�dump_metrics_deltar�r��dump_status_deltar4r�r��cleanup)rArWr�r�rrr�finishrs$�zDiagnosticsSession.finishcCs&|jjr|��|jr"|j�d�dS)NzSET sql_log_bin = 1)r3r6�restore_pfs_instrumentsr�r4)rArWr�rrrr��szDiagnosticsSession.cleanupcCs�||_|j�d�|dkrp|j�d���d}|dkr>td�|jjdkr�|j�d���d}|dkr�td�nhtd	�|j�d
�d|_|dkr�|j�d
�|j�d�n |dkr�|j�d�|j�d�|j�d�dS)Nz1CALL sys.ps_setup_disable_thread(CONNECTION_ID())r�zKselect count(*) from performance_schema.setup_consumers where enabled='YES'rzCWARNING: performance_schema.setup_consumers is completely disabled.i�8zIselect count(*) from performance_schema.setup_threads where enabled='YES'zAWARNING: performance_schema.setup_threads is completely disabled.z.Configuring Performance Schema InstrumentationzCALL sys.ps_setup_save(0)Tr�z�UPDATE performance_schema.setup_consumers
                    SET ENABLED = 'YES'
                WHERE NAME NOT LIKE '%\_history%'z�UPDATE performance_schema.setup_instruments
                    SET ENABLED = 'YES',
                        TIMED = 'YES'
                WHERE NAME NOT LIKE 'wait/synch/%'r�zQUPDATE performance_schema.setup_consumers
                    SET ENABLED = 'YES'zzUPDATE performance_schema.setup_instruments
                    SET ENABLED = 'YES',
                        TIMED = 'YES'zzUPDATE performance_schema.threads
            SET INSTRUMENTED = 'YES'
            WHERE PROCESSLIST_ID <> CONNECTION_ID())r�r3r4r5rNr8r�)rA�levelrDrrrr��sT�����������z)DiagnosticsSession.enable_pfs_instrumentscCs.|jdkr*|jr*td�|j�d�d|_dS)Nr�z+Restoring Performance Schema Configurationsz CALL sys.ps_setup_reload_saved()F)r�r�rNr3r4rIrrrr��sz*DiagnosticsSession.restore_pfs_instruments)�stagerWr�c	s�tttd��fdd�}i}tD]~^}}}|s2J�d|�dd|���}d|�d|pVd	��}	||�}
td
|�d��t||�d|�d
|���j|	d|
d�||<q |S)N)r�rcs��j�d|g���}g}|D]�\}|��}|dkr:|dksJ|dkrV|dkrV|�t�q|�d�rl|�t�q|�d�s�|�d�s�|�d	�s�|�d
�s�|�d�r�|�d�s�|�t�q|�d
d��q|S)zb
            Assemble a query on a sys view, formatting columns to be human readable.
            �vselect column_name from information_schema.columns where table_schema='sys' and table_name=? order by ordinal_positionr�r�r��total_requested�latency�_memory�_memory_allocated�_read�_written�_write�count_cSs|SrFr)r_rrrr��rszODiagnosticsSession.fetch_status.<locals>.formatters_for_table.<locals>.<lambda>)	r3r4r9�lowerrr%�endswithr&�
startswith)r�r~rh�column�lcolumnrIrr�formatters_for_table�s>�

���

�����z=DiagnosticsSession.fetch_status.<locals>.formatters_for_tablez
 ORDER BY z%{TABLE}zx$zSELECT * FROM `sys`.`x$�`rVz - Gathering sys.r�z-raw/r)F)rerh)rOrr�k_sys_views_deltarrNr�r3)rAr�rWr�r��status�
table_nameZorder_byrrkrhrrIrr��s&��zDiagnosticsSession.fetch_statusc
s�tttttttfd��fdd�}tD]̐^}}}|||�\}}g}	|	�dd�|��t�j|�j	|�D]l\}
}g}t
|�D]<\}
}z|�||
|��Wq�t||
|
|��Yq�0q�|	�d�dd�|D���qrt||�d|��|	�q*dS)	N)r�pkrcs&dd��j�d|g���D�}g}dd��|D�]����}d|dd|dvrh|��fdd��q.|d	kr�|d
kr��fdd�}|�|�q.||fd
vr���fdd�}|�|�q.|dd�dvr�|�d�r�|��fdd��q.|dk�r�fdd�}|�|�q.|�d��r8�dd����fdd�}|�|�q.��d��rX|��fdd��q.�dv�r�|dk�rpdnd�|dk�r�dnd����fdd�}|�|�q.|�d ��s�|�d!��s�|�d"��s�|�d#��s�|�d$��r��d%��s��fd&d�}|�|�q.��fd'd�}|�|�q.||fS)(NcSsg|]}|d�qSr+rr0rrrr/szVDiagnosticsSession.dump_status_delta.<locals>.formatters_for_table.<locals>.<listcomp>r�cSs|dur|St|�SrF�r�rrrr�
float_or_none
szYDiagnosticsSession.dump_status_delta.<locals>.formatters_for_table.<locals>.float_or_none�,cs
|��SrFrr��r�rrr�rszTDiagnosticsSession.dump_status_delta.<locals>.formatters_for_table.<locals>.<lambda>r�Z	write_pctcs�t|dpd�}�|d�}t|dp(d�}�|d�}|dus\|dus\||||dkr`dSd||||||dd�S)NZ
total_readrZ
total_writtenr*�.2fr)r rPZe_readZs_readZ	e_writtenZ	s_written�rrr�fmts���zODiagnosticsSession.dump_status_delta.<locals>.formatters_for_table.<locals>.fmt))r�r�)r�r�cs4�|��}t|�pd�}|dur(dSt||�S�Nr�r�r%r��r�rrrr+s
�)Zmax_Zmin_�_latencycs |�durtt|���SdSrF�r&r�r�rrrr�5s

�
�Zavg_latencycslt|dpd�}�|d�}t|dp(d�}�|d�}|dusT|dusT||dkrXdSt||||�S)Nr�rr��r�r&�r rPZe_latZs_lat�e_total�s_totalrrrr9s�Z_avg_latencyi�cs�t|��d�pd�}�|��d��}t|��d�p:d�}�|��d��}|dusl|dusl||dkrpdSt||||�S)Nr
rr rr)rr�rrrGs�r�cs0t|�dur*t|��t|�p$d�nd�Sr	rr�rrrr�Ss
��)�avg_readZ	avg_writeZavg_writtenr�readZwrittenr]cs�t|d���pd�}�|d����}t|d���p:d�}�|d����}|dks`|durddS||}||}|dkr�dSt||�S)NZtotal_rr�r
)r rPrrZe_countZs_countr$�d)r�suffix�suffix2rrrZsr�r�r�r�r�r�cs4�|��}t|�pd�}|dur(dSt||�Sr	r
)r rP�e_�s_rrrrns
cs2t|�pd�}�|��}|dur(dS||�Sr	r)r rPrrrrrrzs
)r3r4r9r�rr�r�)rrr~Zfcolumnsr�rrI)r�rr�rrrr�sh��
�




�����	zBDiagnosticsSession.dump_status_delta.<locals>.formatters_for_tablertrucSsg|]}|pd�qS)r(r)r-r rrrr/�rsz8DiagnosticsSession.dump_status_delta.<locals>.<listcomp>z-delta.)
rOr	rrr�rr{�zipr�r�r�rNrd)rArWr�r�rrrr~rh�linesZ	start_rowZend_rowr�r�rrrIrr�s(�
�
z$DiagnosticsSession.dump_status_deltacCs�|jjsdS|dur |�d�}n|�d|�d�}t|||jdddd�}|D]P}|d}|d}|d	}	|d
}
d|jvr�|	|
g|j|<|j�|g��|�qJdS)Nr��-raw/iteration-z.metricszkSELECT Variable_name, REPLACE(Variable_value, '
', '\\n') AS Variable_value, Type, Enabled FROM sys.metricsF�rerj�
Variable_nameZVariable_value�Type�Enabled�name)r3r6r�r�r��
setdefaultr)rArWr�r�rXr�r�r!�valuer�Zenabledrrrr��s*�
z"DiagnosticsSession.collect_metricsc		s:ddg�dg�ddg��fdd�|jjD�}|�fdd�|jjD�7}|�fd	d�|jjD�7}|jjrr|�d
�|jjr�dD]}||jjvr~|�d|�q~d
d�}|jjdkr�d}d}nd}d}dddd|��dd|�d�dd|fdg}|jj�r|gd�7}t|||j|dd�t	|||j|dd�|�
||�dS) NZ
host_cacheZpersisted_variables�pluginsZaudit_log_userZaudit_log_filtercs(g|] }|�d�s|�vrd|���qS)Zreplication_�performance_schema.)r�r,)�other_pfs_tablesrrr/�s�z@DiagnosticsSession.collect_configs_and_state.<locals>.<listcomp>csg|]}|�vrd|���qS)zinformation_schema.rr,)r;rrr/�s�csg|]}|�vrd|���qS)zmysql.rr,)r<rrr/�s�zndbinfo.threadblocks)r2Zrpd_exec_statsZrpd_query_statsr%cSst|�}d|d<|S)Nz*****�)rU�r�rrr�filter_slave_master_info�szNDiagnosticsSession.collect_configs_and_state.<locals>.filter_slave_master_infoi�8ZREPLICAZREPLICASZSLAVEzSLAVE HOSTS)zglobal variablesaSELECT g.variable_name name, g.variable_value value /*!80000, i.variable_source source*/
            FROM performance_schema.global_variables g
            /*!80000 JOIN performance_schema.variables_info i ON g.variable_name = i.variable_name */
            ORDER BY namezXA RECOVER CONVERT xidzSHOW BINARY LOGSzSHOW zSHOW MASTER STATUSz STATUSzreplication master_infoz;SELECT * FROM mysql.slave_master_info ORDER BY Channel_name)zreplication relay_log_infoz{SELECT Channel_name, Sql_delay, Number_of_workers, Id
                FROM mysql.slave_relay_log_info ORDER BY Channel_name))zrapid table statusaSELECT rpd_table_id.ID, rpd_table_id.Name, rpd_tables.*
                FROM performance_schema.rpd_table_id, performance_schema.rpd_tables
                WHERE rpd_tables.ID = rpd_table_id.ID
                ORDER BY rpd_table_id.SCHEMA_NAME,rpd_table_id.TABLE_NAME)zrapid total table sizezCSELECT SUM(IFNULL(SIZE_BYTES,0)) FROM performance_schema.rpd_tables)zrapid avail_rnstate nodesz�SELECT IFNULL(SUM(memory_total), 0), IFNULL(SUM(memory_usage), 0), IFNULL(SUM(BASEREL_MEMORY_USAGE),0)
                FROM performance_schema.rpd_nodes
                WHERE status = 'AVAIL_RNSTATE'Tr�)r3r:r;r<r=rr>r8r�r�r�)	rArWr�r�r.r)Z
kw_replicaZkw_replicasr�r)r;r<r&r�collect_configs_and_state�sR
���

��
z,DiagnosticsSession.collect_configs_and_statecCs gd�}t|||j|dd�dS)N))z
pfs actorsz-SELECT * FROM performance_schema.setup_actors)zpfs objectsz.SELECT * FROM performance_schema.setup_objects)z
pfs consumersz�SELECT NAME AS Consumer, ENABLED, sys.ps_is_consumer_enabled(NAME) AS COLLECTS
            FROM performance_schema.setup_consumers)zpfs instrumentsaSELECT SUBSTRING_INDEX(NAME, '/', 2) AS 'InstrumentClass',
                ROUND(100*SUM(IF(ENABLED = 'YES', 1, 0))/COUNT(*), 2) AS 'EnabledPct',
                ROUND(100*SUM(IF(TIMED = 'YES', 1, 0))/COUNT(*), 2) AS 'TimedPct'
            FROM performance_schema.setup_instruments
            GROUP BY SUBSTRING_INDEX(NAME, '/', 2)
            ORDER BY SUBSTRING_INDEX(NAME, '/', 2))zpfs threadsz�SELECT `TYPE` AS ThreadType, COUNT(*) AS 'Total', ROUND(100*SUM(IF(INSTRUMENTED = 'YES', 1, 0))/COUNT(*), 2) AS 'InstrumentedPct'
            FROM performance_schema.threads
            GROUP BY TYPETr�)r�r3)rArWr�r�rrrr�sz%DiagnosticsSession.collect_pfs_configcCs�gd�}|jr|�d�|jr*|gd�7}gd�}|jrB|dg7}|jjrt|ddg7}|dd	�|jD�7}|d
g7}|dur�|d|�d�7}t|||j|d
d�t|||j|d
d�dS)N)	z!performance_schema.metadata_lockszperformance_schema.threadszsys.schema_table_lock_waitszsys.session_ssl_statuszsys.sessionzsys.processlistz'performance_schema.events_waits_currentzinformation_schema.innodb_trxz!information_schema.innodb_metricszsys.latest_file_io)z#sys.memory_by_host_by_current_bytesz%sys.memory_by_thread_by_current_bytesz#sys.memory_by_user_by_current_bytesz"sys.memory_global_by_current_bytes)zSHOW GLOBAL STATUSzSHOW ENGINE INNODB STATUSz%SHOW ENGINE PERFORMANCE_SCHEMA STATUSzSHOW FULL PROCESSLISTzSHOW OPEN TABLESzSHOW ENGINE INNODB MUTEXzSHOW ENGINE NDBCLUSTER STATUS)zndb memoryusagez�SELECT node_id, memory_type, format_bytes(used) AS used, used_pages, format_bytes(total) AS total, total_pages,
                   ROUND(100*(used/total), 2) AS 'Used %'
            FROM ndbinfo.memoryusagecSsg|]}|dkr|�qS)zndbinfo.memoryusagerr,rrrr/>sz:DiagnosticsSession.collect_other_stats.<locals>.<listcomp>zinformation_schema.FILESrr)Tr�)	r�rr�r�r3r=r�r�r�)rArWr�r�r�r�rrrr�s*	

��
z&DiagnosticsSession.collect_other_statsc
Cs�|jjsdSgd�}dd�}d}|�|�d�d����}d}|j��D�]�\}}	|r�d	g}
td
t|	�d
�D]8}|
�d|���|d
krj|
�d|d
�d
|�d��qj|
ddg7}
|�d�	|
�d�
d��d}|g}
||v}d}
d}d}t|	�D]�\}}d}||�}|
�|d|��|dk�r�|�s�|du�r�t|jd|�}t|jd|d
�}|du�r�|
du�r�||
k�r|d}n"||
�d||
||d�d�}|
�|�|}
q�|
|j
|7}
|�d�	|
�d�
d��qDWd�n1�s�0YdS)z�
        Format all collected metrics iterations and format into a human readable
        form, also including delta values between each iteration.
        N)Zinnodb_buffer_pool_pages_total�innodb_page_sizeZlast_query_costZlast_query_partial_plansZqcache_total_blocksZslave_last_heartbeatZssl_ctx_verify_depthZssl_ctx_verify_modeZssl_session_cache_sizeZssl_verify_depthZssl_verify_mode�ssl_versionZbuffer_flush_lsn_avg_rateZbuffer_flush_pct_for_dirtyZbuffer_flush_pct_for_lsnZbuffer_pool_pages_totalZlock_row_lock_time_avgZlock_row_lock_time_maxr+cSsz
t|�WSYdS0dSrFrrrrr�asnum`s
z4DiagnosticsSession.dump_metrics_delta.<locals>.asnum�2z-metrics.summary.tsvrbTrr
zOutput zDelta (z -> �)rr rurlr[FrrVzUNIX_TIMESTAMP()z	0 (0/sec)z (rz/sec))r3r6rcr��itemsr�r�rr]r{r^r�r�r�)rArWr�Zno_delta_namesr-Zmax_field_lengthr_�firstr!�valuesr`r�Zno_delta�prevZ	prev_timeZnvaluer#�delta�timerrrr�IsN�
"
z%DiagnosticsSession.dump_metrics_deltaN)rQrRrSr'r�rErr�rOr�r#r�rr�r�r�r�r�r�r�r�rr�r*r�r�r�rrrrr��s2,�#�!80�P�2r�)	rWr�r3�
iterationsr��pfsInstrumentationr�r��custom_shellc	
	Cs~t|dd�}	t||d�}
�zDt||dd�}|	�||�|�||�|
�||��|
�||�d�|�t|�D]�}td|d�d|�d��|
�||�d�|d�|	�	|||�|�	|||�|d7}||dk�rtd	|�d
��z|�
d|g�Wnt�ytd��Yn0ql�q ql|d
k�r2td�|
�||�d��|	�
||�|�
||�Wn|
�||��Yn0dS)NT�r��r��diagnosticsz+Collecting performance metrics (iteration #r
z of z)...z
Sleeping for zs...zselect sleep(?)z^C - aborting...rz#Performance metrics collection done)rr�r�r�r*r�r�rNr�r�r4�KeyboardInterruptr�r�r�)
rWr�r3r6r�r7r�r�r8�shell�diag�customr�rrr�collect_diagnostics�s@	�

r@)rWr�r3r�r�c
Csrt||d�}zRt||dd�}|�||�|�||�|�||d�|�||d�W|�||�n|�||�0dS)Nr:Fr9)r�r�r�r*r�r�r�)rWr�r3r�r�r>r?rrr�collect_diagnostics_once�srA)rWr�r3rc
Cs�d}z|�d���}Wn�ty�}z�|jtjjksB|jtjjkrR|WYd}~S|r�td|���|�	t
|�d��d��0}|�d�|�|�d��d��Wd�n1s�0Y|WYd}~S�WYd}~n
d}~00d}d}	td	�|D]t}
d
|
dk�rd}nd
|
dk�r d}	|
ddk�r>|
ddv�r>q�|
d}t
||�d|��|d|��d|d�q�d}|�s||	�r�|�d���d}|dk�r�d}n.z |�d���d}|�r�d}WnYn0|S)Nz1show full tables in mysql_innodb_cluster_metadataz0ERROR: Could not query InnoDB Cluster metadata: z#mysql_innodb_cluster_metadata.errorrbs2show full tables in mysql_innodb_cluster_metadata
rlr[Fz/Dumping mysql_innodb_cluster_metadata schema...Zasync_cluster_viewsrTZclusterset_viewsr
z
BASE TABLE)Zschema_versionzmysql_innodb_cluster_metadata.r��grzGselect cluster_type from mysql_innodb_cluster_metadata.v2_this_instance�arzDselect count(*) from mysql_innodb_cluster_metadata.v2_cs_clustersets�cs)r4r9rr�rr�ZER_BAD_DB_ERRORZER_NO_SUCH_TABLErNrcrr]r^r�r5)
rWr�r3ri�cluster_typer1rPr_Zrs_possibleZcs_possibler�r�r.rrr�collect_cluster_metadata�sv���
4���
��rF�r3cCsDzdd�|�d���D�WSdd�|�d���D�YS0dS)NcSsg|]}|d|df�qS�rr
rr0rrrr/rsz(get_topology_members.<locals>.<listcomp>zLselect instance_id, endpoint from mysql_innodb_cluster_metadata.v2_instancescSsg|]}|d|df�qSrHrr0rrrr/rsz]select instance_id, addresses->>'$.mysqlClassic' from mysql_innodb_cluster_metadata.instances)r4r9rGrrr�get_topology_memberss
�
�rI)rWr
r3rirc	Cs<|jdkr4td�dd�}t|||d|d|d�dSdSdS)	Ni�8z - Gathering error_logcSsd|dvrdS|S)Nztemporary passwordr'rr(rrr�
filter_pwd!sz)collect_error_log_sql.<locals>.filter_pwdzperformance_schema.error_logFr�T)r8rNr�)rWr
r3rirJrrr�collect_error_log_sqls
�rKr�)rWr�r3ricCs4ddg}d|jvr|�d�t||||d|d�dS)N)zslow queries in 95 pctilez=SELECT * FROM sys.statements_with_runtimes_in_95th_percentile)z%slow queries summary by rows examinedaGSELECT DIGEST, substr(DIGEST_TEXT, 1, 50), COUNT_STAR, SUM_ROWS_EXAMINED, SUM_ROWS_SENT, round(SUM_ROWS_SENT/SUM_ROWS_EXAMINED, 5) ratio FROM performance_schema.events_statements_summary_by_digest where DIGEST_TEXT like 'select%' and (SUM_ROWS_SENT/SUM_ROWS_EXAMINED) < .5 ORDER BY SUM_ROWS_EXAMINED/SUM_ROWS_SENT desc limit 20�slow_log)rLzSELECT * FROM mysql.slow_logTr�)r<rr�)rWr�r3rir�rrr�collect_slow_queries3s�

�rM)rWr�r3cCsZtd�|�d���}|�t|�d��d���}|D�]�}|d|d}}|�d|�d|�d	��d
��z8|jd||gd���D]}	|�|	dd	�d
��q�Wn�t�y(}
zl|r�td
|�d|�d|
���|�d|�d|�d|
�d	��d
��ntd|�d|�d|
����WYd}
~
n
d}
~
00|�d�q4Wd�n1�sL0YdS)Nz8Collecting InnoDB Cluster accounts and grant informationzAselect user,host from mysql.user where user like 'mysql_innodb_%'zcluster_accounts.tsvrbrr
z-- �@rlr[zshow grants for ?@?)rLz"WARNING: Error getting grants for r�zCould not get grants for z ERROR: Error getting grants for r\)rNr4r9rcrr]r^rM)rWr�r3riZaccountsr_r�r�r�r1rPrrr�collect_innodb_cluster_accountsKs4�
����rOcCs>|rtd�gd�}|r$|gd�7}t||�||d|d�dS)Nz,Collecting Schema Information and Statistics))zschema tables without a PKa�SELECT t.table_schema, t.table_name, t.table_rows, t.engine, t.data_length, t.index_length
            FROM information_schema.tables t
              LEFT JOIN information_schema.statistics s on t.table_schema=s.table_schema and t.table_name=s.table_name and s.index_name='PRIMARY'
            WHERE s.index_name is NULL and t.table_type = 'BASE TABLE'
                and t.table_schema not in ('performance_schema', 'sys', 'mysql', 'information_schema'))zschema routine sizezvSELECT ROUTINE_TYPE, COUNT(*), SUM(LENGTH(ROUTINE_DEFINITION)) FROM information_schema.ROUTINES GROUP BY ROUTINE_TYPE;)zschema table countz.SELECT count(*) FROM information_schema.tables)zschema unused indexesz'SELECT * FROM sys.schema_unused_indexes))zschema object overviewz(select * from sys.schema_object_overview)zschema top biggest tablesa�select t.table_schema, t.table_name, t.row_format, t.table_rows, t.avg_row_length, t.data_length, t.max_data_length, t.index_length, t.table_collation,
        json_objectagg(idx.index_name, json_object('columns', idx.col, 'type', idx.index_type, 'cardinality', idx.cardinality)) indexes,
        group_concat((select concat(c.column_name, ':', c.column_type)
          from information_schema.columns c
          where c.table_schema = t.table_schema and c.table_name = t.table_name and c.column_type in ('blob'))) blobs
    from information_schema.tables t
    join (select s.table_schema, s.table_name, s.index_name, s.index_type, s.cardinality, json_arrayagg(concat(c.column_name, ':', c.column_type)) col
          from information_schema.statistics s left join information_schema.columns c on s.table_schema=c.table_schema and s.table_name=c.table_name and s.column_name=c.column_name
          group by s.table_schema, s.table_name, s.index_name, s.index_type, s.cardinality
          order by s.table_schema, s.table_name, s.index_name, s.index_type, s.cardinality) idx
    on idx.table_schema=t.table_schema and idx.table_name = t.table_name
    where t.table_type = 'BASE TABLE' and t.table_schema not in ('mysql', 'information_schema', 'performance_schema')
    group by t.table_schema, t.table_name, t.engine, t.row_format, t.table_rows, t.avg_row_length, t.data_length, t.max_data_length, t.index_length, t.table_collation
    order by t.data_length desc limit 20)zschema table enginesa>SELECT ENGINE, COUNT(*) AS NUM_TABLES,
                sys.format_bytes(SUM(DATA_LENGTH)) AS DATA_LENGTH,
                sys.format_bytes(SUM(INDEX_LENGTH)) AS INDEX_LENGTH,
                sys.format_bytes(SUM(DATA_LENGTH+INDEX_LENGTH)) AS TOTAL
            FROM information_schema.TABLES
            GROUP BY ENGINE)zschema table infoz'SELECT * FROM information_schema.TABLESTr�)rNr�)rWr�r3r�rir�rrr�collect_schema_statsis�rP)rWr�r3�schemar�c
Cs|�t|�dt|��dt|��d��d����}dd�}|�d||g���}|sttd|�d	|�d
��Wd�dS||�}g}g}	g}
g}|ddkr�|�d
t�|��dt�|������d}�n|�dt�|��dt�|������d}|�dt�|��dt�|����}
t	|
jd�D]}|�
||���q|�d||g�}
t	|
jd�D]}|	�
||���qP|�d||g�}
t	|
jd�D]}|
�
||���q�|�d||g�}
t	|
jd�D]}|
�
||���q�||||||	|
|d�}|�t�
|��d��Wd�n1�s0YdS)Nzreferenced_table-r)rzrbcSst�t|��dd��S)Nrlz\n)�json�loadsrOr)rrrr�	pythonize�sz%collect_table_info.<locals>.pythonizezMSELECT * FROM information_schema.tables WHERE table_schema=? AND table_name=?zWARNING: Could not find table `z`.`z.` referenced in query (try 'USE schema' first)Z
TABLE_TYPEZVIEWzSHOW CREATE VIEW rzSHOW CREATE TABLE r
zSHOW INDEX IN z^SELECT * FROM information_schema.triggers WHERE EVENT_OBJECT_SCHEMA=? AND EVENT_OBJECT_TABLE=?zMSELECT * FROM mysql.innodb_table_stats WHERE database_name=? AND table_name=?zMSELECT * FROM mysql.innodb_index_stats WHERE database_name=? AND table_name=?)z
Table NamezTable SchemazTable StatusZDDLZIndexesZTriggerszInnoDB Table StatszInnoDB Index Statsr[)rcrr!r4�fetch_one_objectrNr�quote_identifierr5r�rr]r��dumpr^)rWr�r3rQr�r_rTZtable_statusZindexesZtriggersZtable_statsZindex_statsZddlr�r1r�rrr�collect_table_info�s��������������rX)rWr3rkr�rcCs�gd�}|D]}|�|�qt||�d�|d|��ddd�t||�d�|ddd	�d
g}|D]}|�|�q^dd|��fg}|jd
kr�|�dd|��f�t||||dd�S)N)�(SET SESSION optimizer_trace='enabled=on'zSET optimizer_trace_offset=-1zSET optimizer_trace_limit=1Zexplain�EXPLAIN FTrzexplain-optimizer_trace�0SELECT * FROM information_schema.optimizer_tracer��)SET SESSION optimizer_trace='enabled=off'Zexplain_jsonzEXPLAIN format=json i�8Zexplain_analyzezEXPLAIN ANALYZE )rj)r4r�r8rr�)rWr3rkr��beforer��afterr�rrr�
explain_query�s.��
r_)rWr3rkr�cCs@ddd|��ddddd|��ddd	d
g}t||�d�||�dS)Nz#SET SESSION use_secondary_engine=ONzSELECT NOW()rZz!SHOW SESSION STATUS LIKE 'rapid%'rYzSET optimizer_trace_offset=-2z~SELECT query, trace->'$**.Rapid_Offload_Fails', trace->'$**.secondary_engine_not_used' FROM information_schema.optimizer_tracer[z$SET SESSION use_secondary_engine=OFFr\zexplain-rapid.txt)r�)rWr3rkr�r�rrr�explain_heatwave_query
s ��r`)rV)F)FF)4Zmultiprocessingr�	threadingr�mysqlshrr�typingrrrr	r�rRrr�	host_inforrrOrrr!r%r&r'r�rUrdr�r�r��dictr�r�r�r�r�r�r#r�r@rArFrIrKrMrOrPrXr_r`rrrr�<module>s�B���c������#�"
�
�
�
�
�
�
�
�
�
�
��
�
�
�
�
�
�
�
�
�
�
�
�
��R<&��7���7�����!��9�I��