今天给各位分享oracle转mysql字符长度过长的知识,其中也会对mysql id 不建议过长进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录
mysql数据库cpu飙升800%,如何故障定位及优化
mysql中CPU占用过高的诊断思路,举个栗子~
mpstat-PALL1,查看cpu使用情况,主要消耗在sys即os系统调用上
perftop,cpu主要消耗在_spin_lock
生成perfreport查看详细情况
CPU主要消耗在mutex争用上,说明有锁热点。
采用pt-pmp跟踪mysqld执行情况,热点主要集中在mem_heap_alloc和mem_heap_free上。
Pstack提供更详细的API调用栈
#00x0000003e0caf80cfin__lll_unlock_wake_private()from/lib64/libc.so.6#10x0000003e0ca7cf6ain_L_unlock_5936()from/lib64/libc.so.6#20x0000003e0ca78bbcin_int_free()from/lib64/libc.so.6#30x000000000097dcb3inmem_area_free(void*,mem_pool_t*)()#40x000000000097d2d2inmem_heap_block_free(mem_block_info_t*,mem_block_info_t*)()#50x00000000009e6474inrow_vers_build_for_consistent_read(unsignedcharconst*,mtr_t*,dict_index_t*,unsignedlong**,read_view_t*,mem_block_info_t**,mem_block_info_t*,unsignedchar**)()#60x00000000009dce75inrow_search_for_mysql(unsignedchar*,unsignedlong,row_prebuilt_t*,unsignedlong,unsignedlong)()#70x0000000000939c95inha_innobase::index_read(unsignedchar*,unsignedcharconst*,unsignedint,ha_rkey_function)()Innodb在读取数据记录时的API路径为
row_search_for_mysql--》row_vers_build_for_consistent_read--》mem_heap_create_block_func--》mem_area_alloc--》malloc--》_L_unlock_10151--》__lll_unlock_wait_privaterow_vers_build_for_consistent_read会陷入一个死循环,跳出条件是该条记录不需要快照读或者已经从undo中找出对应的快照版本,每次循环都会调用mem_heap_alloc/free。
而该表的记录更改很频繁,导致其undohistorylist比较长,搜索快照版本的代价更大,就会频繁的申请和释放堆内存。
Linux原生的内存库函数为ptmalloc,malloc/free调用过多时很容易产生锁热点。
当多条SQL并发执行时,会最终触发os层面的spinlock,导致上述情形。
解决方案
将mysqld的内存库函数替换成tcmalloc,相比ptmalloc,tcmalloc可以更好的支持高并发调用。
修改my.cnf,添加如下参数并重启
[mysqld_safe]malloc-lib=tcmalloc上周五早上7点执行的操作,到现在超过72小时,期间该实例没有再出现cpu长期飙高的情形。
以下是修改前后cpu使用率对比
oracle转mysql字符长度过长
其实这不是一个固定的数字,varchar的长度是有限制规则的,在MySQL数据库中varchar的限制规则;1、限制规则字段的限制在字段定义的时候有以下规则:
a)存储限制varchar字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535。
b)编码长度限制字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;字符类型若为utf8
如何使用mysql主从配置
mysql主从配置
MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的
MySQL主从是基于binlog的,主上须开启binlog才能进行主从。
主从过程大致有3个步骤
1)主将更改操作记录到binlog里
2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog(中继日志)里
3)从根据relaylog里面的sql语句按顺序执行
主上有一个logdump线程,用来和从的I/O线程传递binlog
从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地
这里写图片描述
主从配置-主上操作
安装mysql
修改my.cnf,增加server-id=130和log_bin=aminglinux1
[root@wwlinux701logs]#vim/etc/my.cnf
server-id=130
log_bin=wwlinux701
修改完配置文件后,启动或者重启mysqld服务
[root@wwlinux701logs]#/etc/init.d/mysqldrestart
ShuttingdownMySQL....SUCCESS!
StartingMySQL..............SUCCESS!
[root@wwlinux701logs]#
1
2
3
4
把mysql库备份并恢复成aming库,作为测试数据
mysqldump-uroot-p123456mysql>/tmp/mysql.sql
mysql-uroot-p123456-e“createdatabaseaming”
mysql-uroot-p123456aming</tmp/mysql.sql
[root@wwlinux701logs]#mysqldump-uroot-p123456mysql>/tmp/mysql.sql
Warning:Usingapasswordonthecommandlineinterfacecanbeinsecure.
[root@wwlinux701logs]#mysql-uroot-p123456-e"createdatabaseaming"
Warning:Usingapasswordonthecommandlineinterfacecanbeinsecure.
[root@wwlinux701logs]#mysql-uroot-p123456aming</tmp/mysql.sql
Warning:Usingapasswordonthecommandlineinterfacecanbeinsecure.
[root@wwlinux701logs]#
创建用作同步数据的用户
mysql-uroot-p123456aming
grantreplicationslaveon.to‘repl’@192.168.11.131identifiedby‘123456’;
flushtableswithreadlock;#需要先锁定表
showmasterstatus;
[root@wwlinux701logs]#mysql-uroot-p123456aming
grantreplicationslaveon*.*to'repl'@192.168.11.131identifiedby'123456';
mysql>grantreplicationslaveon*.*to'repl'@192.168.11.131identifiedby'123456';
QueryOK,0rowsaffected(1.00sec)
mysql>
flushtableswithreadlock;#需要先锁定表
mysql>flushtableswithreadlock;
QueryOK,0rowsaffected(0.11sec)
mysql>
wwlinux701.000001|660619#需要记住这两个参数
这里写图片描述
主从配置-从上操作
安装mysql
查看my.cnf,配置server-id=131,从要求和主不一样从上不需要log_bin,因为只有主才需要二进制文件
修改完配置文件后,启动或者重启mysqld服务
scp192.168.11.130:/tmp*.sql/tmp/
把主上aming库同步到从上mysql库除外的其他库都同步一下
可以先创建aming库,然后把主上的/tmp/mysql.sql拷贝到从上,然后导入aming库
mysql-uroot-p123456
stopslave;
changemastertomaster_host=’192.168.11.130’,master_user=’repl’,master_password=’123456’,master_log_file=’wwlinux701.000001’,master_log_pos=660619;
startslave;
showslavestatus\G#用这个命令监测如果是两个yes就是没问题的
这里写图片描述
还要到主上执行unlocktables;
查看主从同步是否正常
从上执行mysql-uroot
showslavestauts\G
看是否有
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
还需关注
Seconds_Behind_Master:0//为主从延迟的时间
Last_IO_Errno:0
Last_IO_Error:
Last_SQL_Errno:0
Last_SQL_Error:
几个配置参数
主服务器上
binlog-do-db=//仅同步指定的库
binlog-ignore-db=//忽略指定库
从服务器上
replicate_do_db=
replicate_ignore_db=
replicate_do_table=
replicate_ignore_table=
replicate_wild_do_table=//如aming.%,支持通配符%
replicate_wild_ignore_table=
测试主从
主上mysql-uroot-p123456aming
selectcount(*)fromdb;
这里写图片描述
truncatetabledb;
到从上mysql-uroot-p123456aming
selectcount(*)fromdb;
这里写图片描述
主上继续droptabledb;
从上查看db表
主上执行
select*fromuserwhereHost=’localhost’;
mysql>deletefromuserwhereHost=’localhost’;
这里写图片描述
从上执行
select*fromuserwhereHost=’localhost’;
这里写图片描述
如果你还想了解更多这方面的信息,记得收藏关注本站。