阿里云RDS使用感受
阿里云RDS使用总结: 1、只读从库按照小时结算(通用型 8核、32G内存,500G硬盘,4.63元/小时)。 2、按年计算,只读从库总费用超过主库。主库默认带一个备库用于灾备,从库没有备库。阿里云库少赚的钱,从库给你找补回来。 3、只读从库购买之后初始化数据要持续一段时间(主库165G,只读从库初始化时间大约30分钟)。 4、购买只读从库后,需要在主库界面点击“申请读写分离地址” 5、设置读写分
Read more阿里云RDS使用总结: 1、只读从库按照小时结算(通用型 8核、32G内存,500G硬盘,4.63元/小时)。 2、按年计算,只读从库总费用超过主库。主库默认带一个备库用于灾备,从库没有备库。阿里云库少赚的钱,从库给你找补回来。 3、只读从库购买之后初始化数据要持续一段时间(主库165G,只读从库初始化时间大约30分钟)。 4、购买只读从库后,需要在主库界面点击“申请读写分离地址” 5、设置读写分
Read moreMySQL中存在长时间运行的SQL和事务(超过120S),对数据库而言是潜在隐患,这颗“雷”总有爆炸的一天。 比如,修改表结构之前,切记要在从库检查是否有长时间运行的SQL,有请杀掉,避免从库产生元数据锁引起的从库延迟。 建议定时扫描MySQL中长时间运行的SQL,并kill掉,排除隐患。
1 2 3 4 5 6 7 8 9 10 11 12 |
SELECT trx.trx_id, trx.trx_started, trx.trx_mysql_thread_id, trx.trx_query FROM INFORMATION_SCHEMA.INNODB_TRX AS trx INNER JOIN INFORMATION_SCHEMA. PROCESSLIST AS pl ON trx.trx_mysql_thread_id = pl.id WHERE trx.trx_started < CURRENT_TIMESTAMP - INTERVAL 120 SECOND AND pl. USER <> 'system_user'; |
Read more
工作中MySQL使用Innodb引擎时,创建表一定要加上主键(最好是无意义的auto increment列)。如果表没有主键和索引,且数据量很大,那么在主从复制时,从库上该表的dml操作不能根据主键和索引快速定位到操作的数据,只能采用全表扫描,速度非常缓慢。 因此,对于InnoDB而言,主键非常重要。 找出数据库中哪些表没有主键:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SELECT t.table_schema, t.table_name, k.constraint_name, k.column_name FROM information_schema.tables t LEFT JOIN information_schema.key_column_usage k ON t.table_schema = k.table_schema AND t.table_name = k.table_name AND k.constraint_name = 'PRIMARY' WHERE t.table_schema NOT IN ( 'mysql', 'information_schema', 'performance_schema' ) AND k.constraint_name IS NULL AND t.table_type = 'BASE TABLE'; |
Read more
从库延迟有两方面原因: 1、IO thread慢,主要是因为网络带宽不足。 在主从库开启启压缩参数slave_compressed_protocol减少压力。网上查看实验数据,压缩率大概是1/4(开启压缩7.14MB/s,不开启则是23.76MB/s) 如果CPU压力已经很大不建议开启压缩参数,毕竟压缩要消耗大量CPU资源。 2、 SQL thread慢。 SQL thread负责读取relay
Read more在工作中,最初创建MySQL时,使用默认的 lower_case_table_names =0 ,区分表名大小写。后续,为了使用方便,不区分表名大小写,要将lower_case_table_names设置为1。 那么,修改时要注意什么? 先明确的概念: lower_case_table_names=0,那么t1和T1是两张表。 lower_case_table_names=1,t1和T1就是一张表
Read more开发同事反应给我,通过Mycat 查询小值,遇到了一个bug。子查询中应该得到结果为5个10,整个查询结果应为10。但是这里为0,显然是错误的。
1 2 3 4 5 6 7 |
mysql> select min(task_ymd) from (SELECT 10 AS task_ymd FROM table_name LIMIT 5 ) t ; +------+ | MIN0 | +------+ | 0 | +------+ 1 row in set (0.00 sec) |
我测试了几遍,确实存在这个问题。向下直接捅到MySQL,在不同分片上执行相同的语句。 结果有两种。 1、子查询所在的分片中表中没有数据,那么返回值为NULL [crayon-67679cb
Read more写的很好,记录下来。 转自58到家数据库30条军规解读 军规适用场景:并发量大、数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一、基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高 (2)必须使用UTF8字符集 解读:万国码,无需转码,无乱码风险,节省空间
Read more创建临时表
1 |
mysql> create temporary table t(id int); |
创建的临时表只对当前会话可见,用于存放临时数据,关闭会话临时表自动删除。 show tables看不到表,但是可以通过show create table t\G 来查看表结构。
1 2 3 4 5 6 7 8 9 10 11 |
mysql> show tables; Empty set (0.00 sec) mysql> mysql> show create table t\G *************************** 1. row *************************** Table: t Create Table: CREATE TEMPORARY TABLE `t` ( `id` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec) |
临时表的默认存储引擎,由 default_tmp_storage
Read more