MySQL分割数据
引言一般来说讲,提到数据拆分,可以归结为两个层面:一是垂直拆分,二是水平拆分。这里我们来讨论下垂直拆分。垂直拆分是以数据库、表、列等为单位进行拆分的方法。正文MySQL里垂直拆分可以细分为:垂直拆库(...
2024.11.15主备切换有两种场景,主动切换与被动切换。其中被动切换往往是因为主库出问题了,由 HA 系统发起的。如何判断主库是否出现问题呢?以下整理集中判断方法。
select 1笔者刚接触连接池时(那个时候还是C3P0,DBCP等技术),测活机制就是使用select 1。但是成功返回只能说明这个库的进程还在,并不能说明主库没问题。
select 1失效情况
innodb_thread_concurrency 参数控制 InnoDB 的并发线程上限。以上实验,我把innodb_thread_concurrency 设置成 3,表示 InnoDB 只允许 3 个线程并行执行。前三个 session 中的 sleep(100),使得这三个语句都处于“执行”状态,以此来模拟慢查询。session D 里面,select 1 是能执行成功的,但是查询表 t 的语句会被堵住。也就是说这时候我们用 select 1 来检测实例是否正常,是检测不出问题的。
查表判断为了能够检测 InnoDB 并发线程数过多导致的系统不可用情况,在系统库(mysql 库)里创建一个表,比如命名为 health_check,里面只放一行数据,然后定期执行:
mysql> select * from mysql.health_check;问题:使用这个方法,我们可以检测出由于并发线程过多导致的数据库不可用的情况。但是,空间满了以后,无法判断。
insert插入判断insert into mysql.health_check(id, t_modified) values (1, now()) on duplicate key update t_modified=now();问题:
双 M 结构,在备库 B 上执行的检测命令,也要发回给主库 A。但是,如果主库 A 和备库 B 都用相同的更新命令,就可能出现行冲突(主键冲突),也就是可能会导致主备同步停止。
insert+server idmysql> CREATE TABLE `health_check` ( `id` int(11) NOT NULL, `t_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`)) ENGINE=InnoDB;brbr/* 检测命令 */insert into mysql.health_check(id, t_modified) values (@@server_id, now()) on duplicate key update t_modified=now();白盒检测MySQL 5.6 版本以后提供的 performance_schema 库,就在 file_summary_by_event_name 表里统计了每次 IO 请求的时间。单位: 纳秒
单次 IO 请求时间超过 200 毫秒属于异常,然后使用类似下面这条语句作为检测逻辑。
mysql> select event_name,MAX_TIMER_WAIT FROM performance_schema.file_summary_by_event_name where event_name in (‘wait/io/file/innodb/innodb_log_file‘,‘wait/io/file/sql/binlog‘) and MAX_TIMER_WAIT>200*1000000000;结语一个简单的问题出发,如何判断数据库有问题,可以引出多种方案,而对每一种方案的理解又会涉及到对于数据库原理的深入理解。MySQL是一个经典的数据库,其中很多设计都值得我们好好深入理解。
引用: 林晓斌_MySQL实战45讲
引言一般来说讲,提到数据拆分,可以归结为两个层面:一是垂直拆分,二是水平拆分。这里我们来讨论下垂直拆分。垂直拆分是以数据库、表、列等为单位进行拆分的方法。正文MySQL里垂直拆分可以细分为:垂直拆库(...
2024.11.15作者 | 丁奇出处 | 极客时间《MySQL 实战 45 讲》专栏我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于 MySQL 的学习也是这...
2024.11.12本小节介绍 MySQL 提供的 IF、IFNULL、CASE 三种条件判断函数或结构,条件判断是为了实现控制流,在不同的条件下执行不同的流程。1. IF函数以 student 表为例,使用 IF() ...
2024.11.12MySQL驱动参数你知道多少呢?常见的几个大家应该都见过,如下:参数说明user数据库用户名password用户密码useUnicode是否使用Unicode字符集,如果参数characterEnco...
2024.11.15作者:蔡不菜丶来源:掘金 链接:https://juejin.im/post/5ed3b3fb6fb9a047ed240575概念相当于java中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名1...
2024.11.10