MySQL 常用SQL查询语句
Posted 阿令_DBA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 常用SQL查询语句相关的知识,希望对你有一定的参考价值。
目录
连接字符集查看
select t1.VARIABLE_NAME ,
t1.VARIABLE_VALUE ,
t2.PROCESSLIST_ID,
concat(t2.PROCESSLIST_USER,"@",t2.PROCESSLIST_HOST) ,
t2.PROCESSLIST_DB,
t2.PROCESSLIST_COMMAND
from performance_schema.variables_by_thread t1 , performance_schema.threads t2
where t1.THREAD_ID=t2.THREAD_ID and t1.VARIABLE_NAME like 'character%' ;
查看进程的流量变化
select t1.VARIABLE_NAME ,
t1.VARIABLE_VALUE ,
t2.PROCESSLIST_ID,
concat(t2.PROCESSLIST_USER,"@",t2.PROCESSLIST_HOST) as 'User@host' ,
t2.PROCESSLIST_DB,
t2.PROCESSLIST_COMMAND
from performance_schema.status_by_thread t1 , performance_schema.threads t2
where t1.THREAD_ID=t2.THREAD_ID and t1.VARIABLE_NAME like 'Byte%' and processlist_id=1139 ;
长事物:
超过5s 未提交的事物
information_schema.innodb_trx
information_schema.PROCESSLIST
select trx_mysql_thread_id as processlist_id ,
NOW() ,
trx_started ,
to_seconds(now()) - to_seconds(trx_started) as trx_last_time,
user,
host,
db,
trx_query
from information_schema.innodb_trx trx join information_schema.processlist pc1 on trx.trx_mysql_thread_id=pc1.id where trx_mysql_thread_id != connection_id() and to_seconds(now()) - to_seconds(trx_started) >=5 ;
锁等待查看:
select
locked_table,
locked_index,
locked_type,
blocking_pid,
concat(t2.user,'@',t2.host) as "blocking(user@ip:port)",
blocking_lock_mode,
waiting_trx_rows_modified,
waiting_pid ,
concat(t3.user,'@',t3.host) as "blocking(user@ip:port)",
waiting_lock_mode,
waiting_trx_rows_modified,
wait_age_secs,
waiting_query
from sys.x$innodb_lock_waits t1
left join information_schema.processlist t2 on t1.blocking_pid=t2.id
left join information_schema.processlist t3 on t3.id=t1.waiting_pid ;
影响锁等待的超时的参数
innodb_lock_wait_timeout 默认50s
DDL/DML锁
select trx_mysql_thread_id as processlist_id ,
NOW() ,
trx_started ,
to_seconds(now()) - to_seconds(trx_started) as trx_last_time,
user,
host,
db,
trx_query
from information_schema.innodb_trx trx join information_schema.processlist pc1 on trx.trx_mysql_thread_id=pc1.id where trx_mysql_thread_id != connection_id() and
to_seconds(now()) - to_seconds(trx_started) >= (select max(Time) from information_schema.processlist where state ='Wait for table metadata lock' and info like 'alter%table%' or info like 'truncate%table%' ) ;
场景2: kill掉 下发DDL语句用户连接,取消ddl语句下发,保证业务不被阻塞
select * from information_schema.processlist where info like 'alter%table%' ;
全局读锁:
场景1: 杀掉添加ftwal的会话,恢复业务运行 FTWRL = “flush table with read lock”
select processlist_id ,
md1.object_type,
object_schema,
object_name,
lock_type,
lock_duration,
lock_status
from performance_schema.metadata_locks md1
inner join performance_schema.threads thd on md1.OWNER_THREAD_ID=thd.thread_id
and processlist_id <> connection_id()
and lock_duration='EXPLICIT' ;
内存使用:
默认只对 performance_schema库进行内存统计,对于全局内存统计需要手动开启
//动态开启
update performance_schema.setup_instruments set enabled='yes' where name like 'memory%'
//修改参数文件,从其生效
performance-schema-instrument='memory/%=COUNTED'
select event_name,
current_alloc
from sys.memory_global_by_current_bytes where event_name like 'memory%innodb%' ;
分区表相关
select table_schema ,
table_name ,
count(partition_name) as partition_count ,
sum(table_rows) as table_total_rows,
concat( round(sum(data_length) / (1024*1024),2),'M' ) data_length ,
concat( round(sum(index_length) / (1024*1024),2),'M' ) index_length ,
concat( round ( round ( sum(data_length+index_length)) / (1024 * 1024),2 ),'M' ) total_size
from information_schema.partitions
where table_name not in (
'sys',
'mysql',
'INFORMATION_SCHEMA',
'performance_schema')
and partition_name is not null group by table_schema,table_name
order by sum(data_length+index_length) desc ;
各实例的大小
select table_schema,
round( sum(data_length+index_length)/1024/1024,2 ) as total_size_mb ,
round( sum(data_length)/1024/1024,2 ) as data_size_mb ,
round( sum(index_length)/1024/1024,2 ) as index_size_mb ,
count(*) as tables
from information_schema.tables
where table_schema not in (
'sys',
'mysql',
'INFORMATION_SCHEMA',
'performance_schema')
group by table_schema order by 2 desc ;
各表的大小
select table_schema,
table_name,
round(data_length/1024/1024,2) as data_length_mb ,
round(index_length/1024/1024,2) as index_length_mb,
round( (data_length+index_length)/1024/1024,2 ) as total_size_mb ,
engine
from information_schema.tables
where table_schema not in (
'sys',
'mysql',
'INFORMATION_SCHEMA',
'performance_schema')
and table_schema='wlcj' ----指定schema
order by (data_length+index_length) desc limit 10 ;
长时间未更新的表
information_schema.tables update_time未null表示重启之后没有发生更改
select table_schema,
table_name,
update_time
from information_schema.tables
where table_schema not in (
'sys',
'mysql',
'INFORMATION_SCHEMA',
'performance_schema')
and table_type='BASE TABLE'
order by update_time;
无主键、唯一建以及二级索引
select
t1.table_schema,
t1.table_name
from information_schema.columns t1 join information_schema.tables t2 on
t1.table_schema=t2.table_schema and t1.table_name = t2.table_name
where t1.table_schema not in (
'sys',
'mysql',
'INFORMATION_SCHEMA',
'performance_schema')
and t2.table_type='BASE TABLE'
and t1.table_schema='wlcj'
group by t1.table_schema,t1.table_name having max(column_key)='' ;
无主键、唯一健、仅有二级索引
select
t1.table_schema,
t1.table_name
from information_schema.columns t1 join information_schema.tables t2 on
t1.table_schema=t2.table_schema and t1.table_name = t2.table_name
where t1.table_schema not in (
'sys',
'mysql',
'INFORMATION_SCHEMA',
'performance_schema')
and t2.table_type='BASE TABLE'
and t1.table_schema='wlcj'
and t1.column_key !=''
group by t1.table_schema,t1.table_name having group_concat(column_key) not regexp 'PRI|UNI';
仅有主键、唯一健表
select
t1.table_schema,
t1.table_name
from information_schema.columns t1 join information_schema.tables t2 on
t1.table_schema=t2.table_schema and t1.table_name = t2.table_name
where t1.table_schema not in (
'sys',
'mysql',
'INFORMATION_SCHEMA',
'performance_schema')
and t2.table_type='BASE TABLE'
and t1.table_schema='wlcj'
and t1.column_key !=''
group by t1.table_schema,t1.table_name having group_concat(column_key) not regexp 'MUL';
无主键,无唯一健
select
t1.table_schema,
t1.table_name
from information_schema.columns t1 join information_schema.tables t2 on
t1.table_schema=t2.table_schema and t1.table_name = t2.table_name
where t1.table_schema not in (
'sys',
'mysql',
'INFORMATION_SCHEMA',
'performance_schema')
and t2.table_type='BASE TABLE'
and t1.table_schema='wlcj'
group by t1.table_schema,t1.table_name having group_concat(column_key) not regexp 'PRI|UMI';
存储引擎相关
select table_schema,
engine,
count(*)
from information_schema.tables
where table_schema not in (
'sys',
'mysql',
'INFORMATION_SCHEMA',
'performance_schema')
and table_type='BASE TABLE'
group by table_schema, engine ;
以上是关于MySQL 常用SQL查询语句的主要内容,如果未能解决你的问题,请参考以下文章