破除迷信,研究了解tidb
最近一直在给妈妈控糖,买了一个记录仪,隔一分钟记录她的血糖值,就是那种不用穿刺,皮下埋的那种。一个发射器可以用15天。我发现很多买这种动态血糖仪的人总在纠结它测的血糖是否正确。
还有我买了一个血压计,岳母本身有高血压,测试出来血压170,130 是非常高的高血压,她反应是拒绝 害怕,说血压计是错的,我吃药了怎么还这么高,让她去医院 她又逃避,因为她知道她血压不正常。去医院得花钱。这就是迷信。你不检查不治疗,到后面血压影响身体健康时。那就得多花更多的钱。
在公司里其实也是这样 很多开发对sql 对数据库不了解。觉得神秘感,有问题就找dba,让dba来解决。他自己不参与数据库的管理。其实挺不意外的。他其实和我岳母的行为差不多,人类对自己未知的事情充满了恐惧感。
其实我们的身体 tidb 都是一样的 同是一套系统。维系身体健康。需要健康体重,饮食,血糖,血压。
维系数据库健康。需要监视cpu,内存,读io,写io,索引超过6个的表,用不到的索引,最大的临时表,读写权限。就这些挺简单明了的。有这些你就能维护好任何数据库系统。
但维护tidb又不一样了。作为分布式数据库,维护他需要额外关注读热点,写热点,分散io,网络情况。这些tidb都提供了可视化的界面让我们参考。
而运维工具的便捷性,可视化的监控界面是ob做的还不够的地方。一个系统做的太复杂,就会对dba熟悉他产生心智负担。
ob不好的方面有
1.他有只记录日志不复制数据的节点。
2.他有分区键的概念你要打散数据必须合理设计分区键
3.没有直观的可视化管理工具,对用户是黑盒。
4.最近有搞了列数据,行数据,列索引,行索引。说得好是数据类型多,其实也是增加用户心智负担。
我一个表有列存了还需要列索引吗 肯定不需要。列索引其实相当于一个标准表的子表。只为这一列统计做加速服务的。新概念。
这些是我维护数据库系统中产生的一些不成熟想法。也的确用到了自己的工作当中比如对于数据库权限的管理我就用脚本做了权限区分。
附属脚本。管理tidb的密码
import sys
database=str(sys.argv[1])
rds=str(sys.argv[2])
import random
import string
r1 = ‘’.join(random.sample(string.ascii_letters + string.digits, 20))
计算一个随机密码
r2 = ‘’.join(random.sample(string.ascii_letters + string.digits, 20))
计算一个随机密码
print(f"create database if not exists {database} default character set utf8mb4 default collate utf8mb4_bin;“)
print(f"create user ‘{database}data’@‘172.%’ identified by ‘{r1}’ ;”)
给一个管理可变更表的用户
print(f"grant select,insert, update, delete on {database}.* to ‘{database}data’@‘172.%’ ;“)
print(f"grant create,drop,alter,index,create view on {database}.* to ‘{database}data’@‘172.%’;”)
给一个管理数据的不可变更表的用户
print(f"create user ‘{database}opr’@‘172.%’ identified by ‘{r2}’ ;“)
print(f"grant select,insert, update, delete on {database}.* to ‘{database}opr’@‘172.%’;”)
print(f"use {database};")
print(f"eval $(op signin);op item get "{rds}" --format json | op item edit "{rds}" {database}data="{r1}" {database}opr="{r2}" ");
#配合密码记录工具 做密码记录。
#查询最大的表
select table_schema,table_name,table_rows, truncate(data_length/1024/1024/1024, 2) as ‘table_GB’, truncate(index_length/1024/1024, 2) as ‘index_GB’ from information_schema.tables order by data_length desc, index_length desc limit 50;
2.写自动化脚本巡检生产系统去查询哪些没有走索引并总体耗时最多的sql
SELECT FLOOR(UNIX_TIMESTAMP(MIN(summary_begin_time))) AS agg_begin_time, FLOOR(UNIX_TIMESTAMP(MAX(summary_end_time))) AS agg_end_time, ANY_VALUE(digest_text) AS agg_digest_text, ANY_VALUE(digest) AS agg_digest, SUM(exec_count) AS agg_exec_count, SUM(sum_latency) AS agg_sum_latency, MAX(max_latency) AS agg_max_latency, MIN(min_latency) AS agg_min_latency, CAST( SUM(exec_count * avg_latency) / SUM(exec_count) AS SIGNED ) AS agg_avg_latency, CAST( SUM(exec_count * avg_mem) / SUM(exec_count) AS SIGNED ) AS agg_avg_mem, MAX(max_mem) AS agg_max_mem, ANY_VALUE(schema_name) AS agg_schema_name, ANY_VALUE(plan_digest) AS agg_plan_digest,query_sample_text,index_names FROM INFORMATION_SCHEMA
.CLUSTER_STATEMENTS_SUMMARY_HISTORY
where index_names is null and query_sample_text >‘’ GROUP BY schema_name, digest ORDER BY agg_sum_latency DESC limit 10;
这个sql能查出最慢无索引sql
3.需要找出系统中单个sql很快但执行次数过多总计最耗时间的sql。让开发放缓存。
SELECT FLOOR(UNIX_TIMESTAMP(MIN(summary_begin_time))) AS agg_begin_time, FLOOR(UNIX_TIMESTAMP(MAX(summary_end_time))) AS agg_end_time, ANY_VALUE(digest_text) AS agg_digest_text, ANY_VALUE(digest) AS agg_digest, SUM(exec_count) AS agg_exec_count, SUM(sum_latency) AS agg_sum_latency, MAX(max_latency) AS agg_max_latency, MIN(min_latency) AS agg_min_latency, CAST( SUM(exec_count * avg_latency) / SUM(exec_count) AS SIGNED ) AS agg_avg_latency, CAST( SUM(exec_count * avg_mem) / SUM(exec_count) AS SIGNED ) AS agg_avg_mem, MAX(max_mem) AS agg_max_mem, ANY_VALUE(schema_name) AS agg_schema_name, ANY_VALUE(plan_digest) AS agg_plan_digest,query_sample_text,index_names FROM INFORMATION_SCHEMA
.CLUSTER_STATEMENTS_SUMMARY_HISTORY
GROUP BY schema_name, digest ORDER BY agg_sum_latency DESC limit 10;
4.每日找出前1个小时的慢sql让开发整改一次不用多给最慢的一个sql就行多了人家也改不完
select query_time,query from information_schema.CLUSTER_SLOW_QUERY where is_internal = false and Time > date_add(now(),interval -1 hour) and user<>‘root’ and query_time > 7 order by query_time desc limit 1;
我一直喜欢看书,学习是一辈子的事情,如果你不改变自己,你真的没法进步。你就会抱怨社会对你不公平
你的收入少。日子难过。工作 收入都是自己斗争努力争取过来的。