资讯详情

clickhouse MPPDB数据库 运维实用SQL总结

:用于测试python notebook pandas, 所有 %使用的是%% 在SQL返回数据的格式可以添加到最后

  • FORMAT CSVWithNames
  • FORMAT TabSeparatedWithNamesAndTypes

1. 执行SQL查询

1.1. 查看正在执行的查询句

--查询 SELECT query_id, user, address, elapsed, query FROM system.processes ORDER BY query_id ASC  --慢慢杀死执行SQL KILL QUERY WHERE query_id='query_id'; 

1.2. 查看正在执行的更新语句

--查询 SELECT database,table,mutation_id,command,create_time,parts_to_do_names,parts_to_do,latest_fail_reason  FROM system.mutations where is_done<>1  --慢慢杀死执行SQL KILL MUTATION WHERE mutation_id = 'mutation_id'; 

1.3. 查询今天top 10 最慢的SQL

SELECT user, formatDateTime(query_start_time, '%%Y%%m%%d %%T') AS start_time, query_duration_ms / 1000 AS query_duration_s, formatReadableSize(memory_usage ) AS memory_usage, result_rows , formatReadableSize(result_bytes) AS result_bytes, read_rows , formatReadableSize(read_bytes) AS read_bytes, written_rows , formatReadableSize(written_bytes) AS written_bytes, query FROM system.query_log WHERE type = 2 and query_start_time>=today() ORDER BY query_duration_s DESC LIMIT 10  --直接查询
select type,concat(substr(query,1,100),'...') as query,read_rows,query_duration_ms,memory_usage,read_bytes,written_bytes from system.query_log limit 10

--统计执行频繁的SQL
select concat(substr(query,1,100),'...') as sql,count(*) as total from system.query_log
where event_time>'2021-12-01 00:00:00' and event_time<'2021-12-02 00:00:00' and is_initial_query=1 and lower(query) like '%%select%%'
group by sql order by total desc

: query_log记录了所有clickhouse服务中所有已经执行的查询记录

 	<!--全局定义-->
 	<!-- Query log. Used only for queries with setting log_queries = 1. -->
    <query_log>
        <database>system</database>
        <table>query_log</table>
        <partition_by>toYYYYMM(event_date)</partition_by>
        <!-- Interval of flushing data. -->
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </query_log>

	<!--如果只需要为某些用户单独开启query_log,在users.xml的profile中配置-->
	<log_queries>1</log_queries>

1.4. 基于remote统计集群慢SQL

remote(‘addresses_expr’, db, table[, ‘user’[, ‘password’]]) 允许访问远程服务器而不创建分布式表。

  • 按节点按天统计慢SQL数
  • 查询耗时大于指定时间的慢SQL
  • 按节点统计正在运行的SQL数
  • 查询正在运行的SQL
select * from
(         
select 'node1' as server,address,toStartOfDay(event_time) as event_day,count(1) as selectCount from remote('x.x.x.x1','system','query_log') where event_time>'2021-12-01 10:00:00' and event_time<'2021-12-01 11:00:00' and query_duration_ms>10000 and is_initial_query=1 and lower(query) like '%%select%%'  group by address,toStartOfDay(event_time) 
union all select 'node2' as server,address,toStartOfDay(event_time) as event_day,count(1) as selectCount from remote('x.x.x.x2','system','query_log') where event_time>'2021-12-01 10:00:00' and event_time<'2021-12-01 11:00:00' and  query_duration_ms>10000 and is_initial_query=1 and lower(query) like '%%select%%'  group by address,toStartOfDay(event_time) 
union all select 'node3' as server,address,toStartOfDay(event_time) as event_day,count(1) as selectCount from remote('x.x.x.x3','system','query_log') where event_time>'2021-12-01 10:00:00' and event_time<'2021-12-01 11:00:00' and query_duration_ms>10000 and is_initial_query=1 and lower(query) like '%%select%%'  group by address,toStartOfDay(event_time) 
) t order by server,event_day

select 'node1' as server,address,event_time,type,query_duration_ms,query from remote('x.x.x.x1','system','query_log','default') where event_time>'2021-12-01 10:00:00' and event_time<'2021-12-01 11:00:00' and query_duration_ms>10000 and is_initial_query=1 
union all select 'yjdsj03' as server,address,event_time,type,query_duration_ms,query from remote('x.x.x.x2','system','query_log','default') where event_time>'2021-12-01 10:00:00' and event_time<'2021-12-01 11:00:00' and  query_duration_ms>10000 and is_initial_query=1 
union all select 'yjdsj04' as server,address,event_time,type,query_duration_ms,query from remote('x.x.x.x3','system','query_log','default') where event_time>'2021-12-01 10:00:00' and event_time<'2021-12-01 11:00:00' and query_duration_ms>10000 and is_initial_query=1 


select * from
(select 'node1' as server,count(1) as cc from remote('x.x.x.x1','system','processes') 
union all select 'node2' as server,count(1) as cc from remote('x.x.x.x2','system','processes') 
union all select 'node3' as server,count(1) as cc from remote('x.x.x.x3','system','processes')
) t order by server;

select * from
(select 'node1' as server,query_id, user, address, elapsed, query from remote('x.x.x.x1','system','processes')   
union all select 'node2' as server,query_id, user, address, elapsed, query from remote('x.x.x.x2','system','processes') 
union all select 'node3' as server,query_id, user, address, elapsed, query from remote('x.x.x.x3','system','processes')
) t order by server;

2. 查看表信息

2.1. 查看表占用空间大小

SELECT table,partition,formatReadableSize(sum(data_compressed_bytes)) AS compressed_size ,
formatReadableSize(sum(data_uncompressed_bytes)) AS uncompressed_bytes
FROM system.parts
WHERE active AND (table LIKE 'vehicle_warning_%%') 
GROUP BY table,partition
order by partition desc 

2.2. 查看列占用空间大小

select column as colName,any(type) as colType, 	
sum(column_data_compressed_bytes) compressed_size , 	
sum(column_data_uncompressed_bytes) uncompressed_bytes, 	
sum(rows) as rowNum
from system.parts_columns 
where active AND table like 'vehicle_warning_LOCAL'
GROUP BY column
ORDER BY uncompressed_bytes desc ;

2.3. 表的分区信息统计

统计指定时间范围内,表的分区、分区文件数及占用空间大小

SELECT partition, count() AS number_of_parts, formatReadableSize(sum(bytes)) AS sum_size
FROM system.parts 
WHERE active AND (table = 'vehicle_warning_new_LOCAL') and partition between '2021-11-01 00:00:00' and '2021-11-30 00:00:00'
GROUP BY partition
ORDER BY partition ASC

2.4. 查看表的副本情况

SELECT database, table, is_leader, total_replicas, active_replicas, zookeeper_exception
is_session_expired,future_parts, parts_to_check,queue_size,inserts_in_queue,log_max_index,log_pointer
FROM system.replicas where table = 'vehicle_warning_LOCAL'

--查看异常的副本,各个预警的变量可以根据自身情况调整。
SELECT database, table, is_leader, total_replicas, active_replicas, zookeeper_exception 
FROM system.replicas 
WHERE is_readonly OR is_session_expired OR future_parts > 20 OR parts_to_check > 10 OR queue_size > 20 
OR inserts_in_queue > 10 OR log_max_index - log_pointer > 10 OR total_replicas < 2 OR active_replicas < total_replicas

3. 其它

3.1. 查看总连接数

SELECT * FROM system.metrics WHERE metric LIKE '%%Connection';

3.2. 查看磁盘空间

SELECT name,path,formatReadableSize(free_space) AS free_space,
formatReadableSize(total_space) AS total_space, type
FROM system.disks

3.3. 查看集群信息

select cluster,shard_num,shard_weight,replica_num,host_name,host_address,port,user,errors_count,estimated_recovery_time  from system.clusters where replica_num=1

3.5. 查看正在处理MergeTree族表的合并和分区变化

查看目前正在处理MergeTree族表的合并和分区变化的信息

select database ,table,elapsed ,progress,num_parts ,result_part_name ,is_mutation ,total_size_bytes_compressed ,rows_read ,rows_written   
from system.merges

附录

clickhouse系统表

系统表介绍详见官网

使用的函数

import time
def yieldDF(df):
    for index, row in df.iteritems():
        for i in range(len(row)):
            yield row[i],index

def printDF(df,pos=slice(1,2)):
    for row in df.itertuples():
        print(row[pos])
def executeSQL(sql):
    start =time.process_time()
    df = pd.read_sql(sql,con=engine)
    end = time.process_time()
    print('Running time: %s Seconds'%(end-start))
    return df

sql='''select cluster,shard_num,shard_weight,replica_num,host_name,host_address,port,user,errors_count,estimated_recovery_time from system.clusters where replica_num=1 '''
executeSQL(sql)

for d,i in yieldDF(executeSQL(sql).head(1)):
    print(i,'==>',d)

printDF(executeSQL(sql),slice(1,3))

标签: mpp110e贴片电阻

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司