SELECT * FROM fims.base_airlines where id='2001932029704278018'
SELECT * FROM orms.base_airlines where id='2001932029704278018'
select count(*) from fims.base_airlines ;
##
show variables like '%control%'
show plugins;
##查询所有会话
SELECT * FROM information_schema.processlist order by time desc;
##查询活跃会话
SELECT * FROM information_schema.processlist WHERE command != 'Sleep';
##查询system user系统用户会话
SELECT * FROM information_schema.processlist WHERE user = 'system user';
##查询非系统用户会话
SELECT * FROM information_schema.processlist WHERE user != 'system user';
##统计各个用户的会话量
select user,command,count(1) from information_schema.processlist group by user,command
order by COMMAND desc,count(1) desc;
##查看mysql总内存消耗
select * from sys.memory_global_total;
##查看总内存使用
SELECT
SUM(CAST(replace(current_alloc,'MiB','') as DECIMAL(10, 2)) ) as used_memory_mb
FROM sys.memory_global_by_current_bytes
WHERE current_alloc like '%MiB%';
##检查内存使用
SELECT @@key_buffer_size,
@@innodb_buffer_pool_size ,
@@innodb_log_buffer_size ,
@@tmp_table_size ,
@@read_buffer_size,
@@sort_buffer_size,
@@join_buffer_size ,
@@read_rnd_buffer_size,
@@binlog_cache_size,
@@thread_stack,
(SELECT COUNT(host) FROM information_schema.processlist where command<>'Sleep');
##查看 Buffer Pool 使用情况
SELECT
FORMAT(@@innodb_buffer_pool_size / 1024 / 1024 / 1024, 2) AS buffer_pool_size_gb,
#FORMAT(@@innodb_buffer_pool_size * @@innodb_buffer_pool_instances / 1024 / 1024 / 1024, 2) AS total_buffer_pool_gb,
VARIABLE_VALUE AS free_pages
FROM performance_schema.global_status
WHERE VARIABLE_NAME = 'Innodb_buffer_pool_pages_free';
##分事件统计内存
SELECT event_name,
SUM(CAST(replace(current_alloc,'MiB','') as DECIMAL(10, 2)) ) used_memory_mb
FROM sys.memory_global_by_current_bytes
WHERE current_alloc like '%MiB%' GROUP BY event_name
ORDER BY SUM(CAST(replace(current_alloc,'MiB','') as DECIMAL(10, 2)) ) DESC ;
##按用户统计内存使用(需要 MySQL 5.7+)
SELECT
USER,
HOST,
EVENT_NAME,
round(CURRENT_NUMBER_OF_BYTES_USED / 1024 / 1024,2) as CURRENT_USED_MB, #当前该事件已分配但尚未释放的内存字节数。这是判断实时内存占用的关键指标。
COUNT_ALLOC, #该事件累计分配内存的次数。
COUNT_FREE, #该事件累计释放内存的次数。
SUM_NUMBER_OF_BYTES_ALLOC, #该事件累计分配的内存字节数总和。
SUM_NUMBER_OF_BYTES_FREE, #该事件累计释放的内存字节数总和。
CURRENT_COUNT_USED,
HIGH_COUNT_USED,
round(HIGH_NUMBER_OF_BYTES_USED / 1024 / 1024,2) as high_mb
FROM performance_schema.memory_summary_by_account_by_event_name
WHERE USER IS NOT NULL
ORDER BY CURRENT_NUMBER_OF_BYTES_USED desc limit 20;
##账号级别统计
SELECT user,host,event_name,round(current_number_of_bytes_used/1024/1024,2) as MB_CURRENTLY_USED
FROM performance_schema.memory_summary_by_account_by_event_name
WHERE host<>"localhost"
ORDER BY current_number_of_bytes_used DESC LIMIT 10;
##按照线程统计
select thread_id,event_name,round(CURRENT_NUMBER_OF_BYTES_USED/1024/1024 ,2) as CURRENT_NUMBER_OF_BYTES_USED
from performance_schema.memory_summary_by_thread_by_event_name
order by CURRENT_NUMBER_OF_BYTES_USED desc limit 10;
## 查看每个连接的 buffer pool 使用情况
SELECT
p.ID as process_id,
p.USER,
p.HOST,
p.DB,
p.COMMAND,
p.TIME,
p.STATE,
p.INFO,
FORMAT(mt.COUNT_ALLOC, 0) as alloc_count,
FORMAT(mt.CURRENT_NUMBER_OF_BYTES_USED / 1024 / 1024, 2) as current_mb,
FORMAT(mt.HIGH_NUMBER_OF_BYTES_USED / 1024 / 1024, 2) as high_mb
FROM performance_schema.threads t
JOIN information_schema.PROCESSLIST p ON t.PROCESSLIST_ID = p.ID
JOIN performance_schema.memory_summary_by_thread_by_event_name mt ON t.THREAD_ID = mt.THREAD_ID
WHERE mt.EVENT_NAME LIKE 'memory/innodb/%'
AND mt.CURRENT_NUMBER_OF_BYTES_USED > 0
ORDER BY mt.CURRENT_NUMBER_OF_BYTES_USED desc limit 20;
##查看参数配置
show variables like 'wait_timeout'; --28800
show variables like 'innodb_buffer_pool_size'; --85899345920 80GB
##查看session级别的buffer和cache占用内存大小
show variables where variable_name in ('binlog_cache_size','join_buffer_size','query_cache_size','read_buffer_size','read_rnd_buffer_size','sort_buffer_size')
##查看tmp_table_size临时表配置的内存大小: 8589934592 8GB
##如果内存中的临时表超出限制,MySQL自动将其转换为磁盘上的MyISAM表。如果要执行许多 GROUP BY查询,可以增加tmp_table_size的值(或如有必要,也可以使用max_heap_table_size)
show variables where variable_name in ('tmp_table_size','max_heap_table_size')
##查看当前是否有临时表产生
##发现频繁使用了临时表,并且出现了因内存临时表不够而使用到磁盘临时表。由于临时表占用的内存具体大小可能无法准确计算得出(因为使用完会回收,但是肯定存在当前未被回收情况)
show global status like '%tmp%'
##查看 MGR 组成员信息
SELECT * FROM performance_schema.replication_group_members;
--查看数据库大小
select
table_schema as '数据库',
sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'
from information_schema.tables
group by table_schema
order by sum(data_length) desc, sum(index_length) desc;
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
where table_schema='fims'
order by data_length desc, index_length desc;
show variables like '%character%'
SHOW GLOBAL STATUS LIKE 'Table_locks_%';
----数据库性能相关指标------------
/**
*
-- 连接使用率
SELECT
'连接使用率' AS 指标名称,
VARIABLE_VALUE AS 当前连接数,
@@max_connections AS 最大连接数,
ROUND((VARIABLE_VALUE / @@max_connections) * 100, 2) AS 使用率百分比,
CASE
WHEN (VARIABLE_VALUE / @@max_connections) >= 0.8 THEN '警告:连接使用率超过80%'
WHEN (VARIABLE_VALUE / @@max_connections) >= 0.9 THEN '严重:连接使用率超过90%'
ELSE '正常'
END AS 状态
FROM performance_schema.global_status
WHERE VARIABLE_NAME = 'Threads_connected'
union all
## 线程缓存命中率
SELECT
'线程缓存命中率' AS 指标名称,
s1.VARIABLE_VALUE AS 已创建线程数,
s2.VARIABLE_VALUE AS 总连接数,
ROUND((1 - s1.VARIABLE_VALUE / s2.VARIABLE_VALUE) * 100, 2) AS 命中率百分比,
CASE
WHEN (1 - s1.VARIABLE_VALUE / s2.VARIABLE_VALUE) * 100 < 95 THEN '警告:命中率低于95%'
ELSE '正常'
END AS 状态
FROM performance_schema.global_status s1
JOIN performance_schema.global_status s2
WHERE s1.VARIABLE_NAME = 'Threads_created'
AND s2.VARIABLE_NAME = 'Connections'
union all
-- 慢查询比例
SELECT
'慢查询比例' AS 指标名称,
s1.VARIABLE_VALUE AS 慢查询数,
s2.VARIABLE_VALUE AS 总查询数,
ROUND((s1.VARIABLE_VALUE / NULLIF(s2.VARIABLE_VALUE, 0)) * 100, 4) AS 慢查询百分比,
CASE
WHEN (s1.VARIABLE_VALUE / NULLIF(s2.VARIABLE_VALUE, 0)) * 100 > 1 THEN '警告:慢查询比例超过1%'
ELSE '正常'
END AS 状态
FROM performance_schema.global_status s1
JOIN performance_schema.global_status s2
WHERE s1.VARIABLE_NAME = 'Slow_queries'
AND s2.VARIABLE_NAME = 'Queries'
union all
-- 临时表使用情况
SELECT
'临时表使用情况' AS 指标名称,
s1.VARIABLE_VALUE AS 磁盘临时表数,
s2.VARIABLE_VALUE AS 总临时表数,
CASE
WHEN s2.VARIABLE_VALUE = 0 THEN 0
ELSE ROUND((s1.VARIABLE_VALUE / s2.VARIABLE_VALUE) * 100, 2)
END AS 磁盘临时表百分比,
CASE
WHEN s2.VARIABLE_VALUE = 0 THEN '正常:无临时表'
WHEN (s1.VARIABLE_VALUE / s2.VARIABLE_VALUE) * 100 > 5 THEN '警告:磁盘临时表超过5%'
ELSE '正常'
END AS 状态
FROM performance_schema.global_status s1
JOIN performance_schema.global_status s2
WHERE s1.VARIABLE_NAME = 'Created_tmp_disk_tables'
AND s2.VARIABLE_NAME = 'Created_tmp_tables'
union all
-- InnoDB缓冲池命中率
SELECT
'InnoDB缓冲池命中率' AS 指标名称,
s1.VARIABLE_VALUE AS 逻辑读次数,
s2.VARIABLE_VALUE AS 物理读次数,
CASE
WHEN (s1.VARIABLE_VALUE + s2.VARIABLE_VALUE) = 0 THEN 0
ELSE ROUND((1 - s2.VARIABLE_VALUE / (s1.VARIABLE_VALUE + s2.VARIABLE_VALUE)) * 100, 2)
END AS 命中率百分比,
CASE
WHEN (1 - s2.VARIABLE_VALUE / (s1.VARIABLE_VALUE + s2.VARIABLE_VALUE)) * 100 < 99 THEN '警告:命中率低于99%'
ELSE '正常'
END AS 状态
FROM performance_schema.global_status s1
JOIN performance_schema.global_status s2
WHERE s1.VARIABLE_NAME = 'Innodb_buffer_pool_read_requests'
AND s2.VARIABLE_NAME = 'Innodb_buffer_pool_reads'
union all
-- InnoDB缓冲池使用率
##MySQL InnoDB缓冲池是数据库内存中的一块区域,用于缓存最近使用的数据和索引。
##合理地管理InnoDB缓冲池可以显著提高读写性能和响应速度,因为将数据保存在内存中比从磁盘读取要快得多。
##较大的缓冲池可以容纳更多的数据和索引,从而减少磁盘IO操作。通常建议将物理内存的70-80%分配给InnoDB缓冲池。
##为了提高性能,应确保在InnoDB缓冲池中有足够的空闲空间。当缓冲池使用率超过90%时,容易导致数据的频繁淘汰和IO操作增加。
SELECT
'InnoDB缓冲池使用率' AS 指标名称,
FORMAT(s1.VARIABLE_VALUE * @@innodb_page_size / 1024 / 1024, 0) AS 已使用_MB,
FORMAT(s2.VARIABLE_VALUE * @@innodb_page_size / 1024 / 1024, 0) AS 总大小_MB,
ROUND((s1.VARIABLE_VALUE / s2.VARIABLE_VALUE) * 100, 2) AS 使用率百分比,
CASE
WHEN (s1.VARIABLE_VALUE / s2.VARIABLE_VALUE) * 100 < 70 THEN '注意:使用率低于70%,可能配置过大'
WHEN (s1.VARIABLE_VALUE / s2.VARIABLE_VALUE) * 100 > 95 THEN '警告:使用率超过95%'
ELSE '正常'
END AS 状态
FROM performance_schema.global_status s1
JOIN performance_schema.global_status s2
WHERE s1.VARIABLE_NAME = 'Innodb_buffer_pool_pages_data'
AND s2.VARIABLE_NAME = 'Innodb_buffer_pool_pages_total'
union all
-- 锁等待情况
SELECT
'InnoDB行锁等待情况' AS 指标名称,
s1.VARIABLE_VALUE AS 等待次数,
s2.VARIABLE_VALUE AS 总等待时间_ms,
CASE
WHEN s1.VARIABLE_VALUE = 0 THEN 0
ELSE ROUND(s2.VARIABLE_VALUE / s1.VARIABLE_VALUE, 2)
END AS 平均等待时间_ms,
CASE
WHEN s1.VARIABLE_VALUE > 1000 THEN '警告:锁等待次数过多'
WHEN s2.VARIABLE_VALUE / NULLIF(s1.VARIABLE_VALUE, 0) > 100 THEN '警告:平均等待时间过长'
ELSE '正常'
END AS 状态
FROM performance_schema.global_status s1
JOIN performance_schema.global_status s2
WHERE s1.VARIABLE_NAME = 'Innodb_row_lock_waits'
AND s2.VARIABLE_NAME = 'Innodb_row_lock_time'
union all
-- 表锁情况
SELECT
'表锁等待情况' AS 指标名称,
s1.VARIABLE_VALUE AS 等待的表锁数,
s2.VARIABLE_VALUE AS 立即获得的表锁数,
CASE
WHEN (s1.VARIABLE_VALUE + s2.VARIABLE_VALUE) = 0 THEN 0
ELSE ROUND((s1.VARIABLE_VALUE / (s1.VARIABLE_VALUE + s2.VARIABLE_VALUE)) * 100, 4)
END AS 表锁等待百分比,
CASE
WHEN (s1.VARIABLE_VALUE / (s1.VARIABLE_VALUE + s2.VARIABLE_VALUE)) * 100 > 1 THEN '警告:表锁等待比例过高'
ELSE '正常'
END AS 状态
FROM performance_schema.global_status s1
JOIN performance_schema.global_status s2
WHERE s1.VARIABLE_NAME = 'Table_locks_waited'
AND s2.VARIABLE_NAME = 'Table_locks_immediate';
**/