-
MySQL之thread cache
从status根据thread关键字可以查出如下是个状态 show global status like 'thread%'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_cached | 57 | | Threads_connected | 1268 | | Threads_created | 31715 | | Threads_running | 1 | +-------------------+-------+ Thread_cached:The number of threads in the thread cache Thread_connected:The number of currently open connections. Thread_created:The number of threads created to handle connections. Thread_running:The number of threads that are not sleeping. 以上是这4个状态的含义,thread_connected等于show processlist,thread_running代表真正在运行的(等于1一般就是这个show status命令本身),thread_cached代表mysql管理的线程池中还有多少可以被复用的资源,thread_created代表新创建的thread(根据官方文档,如果thread_created增大迅速,需要适当调高thread_cache_size)。 我们先来实际看下这4个状态之间的直观关系。 从上面这个图,我们可以总结出来一个公式:running和其他三个状态关系不大,但肯定不会超过thread_connected (new_con-old_con)=create+(old_cache-new_cache) 从上面公式可以看出,如果create等于0,那么thread_connected减少的和thread_cached增加的相等,thread_connected增加的和thread_cached减少的相等。(其实这也就是thread_cached存在的意义,资源可以复用) 我们来看眼影响thread_cached的参数thread_cache_size How many threads the server should cache for reuse. When a client disconnects, the client's threads are put in the cache if there are fewer than thread_cache_size threads ……
SE_Gao 2024-02-2816 0 0 -
MySQL open_tables和opened_tables
一、本文涉及到的系统参数有3个: table_open_cache Server层参数。 这个参数表示针对所有threads的table cache总和,5.6.7之前默认是400,5.6.8之后是2000。 这是个server层的参数,mysql不支持并行查询,mysql的会话也没有PGA的概念,一个thread引用myisam表时需要在server层上创建一个table对象(索引也需要创建一个但是是共享的,self join会创建2个,分区表每个分区按单表对待),如果同时多个会话引用一个表也会创建多个表对象,虽然会加大内存使用量,但是却极大的减少了内部表锁的争用。 这个值的数目建议设置为max_connections*你的表数目,当然你可能也需要为一些临时表等对象预留,但是这个数目已经足够大啦。 那么mysql什么时候释放这些表对象呢? 当缓冲已满,而连接想要打开一个不在缓冲中的表时。 当缓冲数目已经超过了table_open_cache设置的值,mysql开始使用LRU算法释放表对象。 当你用flush tables;语句时。 open_files_limit 引擎层参数。 这个参数表示mysqld可用的最大文件描述符数目,如果你遇到“Too many open files”的错误,应当考虑加大它。这个参数的默认值是0表示无限制(大于5.6.7后默认值不再为0,参考官网),但其实他的值是与操作系统相关的,在Unix系统下这个值的数目不能大于ulimit -n。 这个参数应当大于等于table_open_cache。 目前不清楚当设置了innodb_open_files后此参数是指所有存储引擎的句柄数限制,还是非innodb的句柄数限制,需要研究源码才可以理清,这里暂且认为是前者。 innodb_open_files 引擎层参数。 这个参数只对InnoDB存储引擎有效,它指定了mysql可以同时打开的最大.ibd文件的数目。这个参数即不影响table_open_cache也不受open_files_limit影响,是独立的只对InnoDB有效的。所以在默认为InnoDB存储引擎时可以不考虑open_files_limit只去设inn……
SE_Gao 2024-02-2745 0 0 -
mysql状态分析之show global status
1. 慢查询 show variables like '%slow%'; +---------------------------+---------------------------------------+ | Variable_name | Value | +---------------------------+---------------------------------------+ | log_slow_admin_statements | OFF | | log_slow_slave_statements | ON | | slow_launch_time | 2 | | slow_query_log | ON | | slow_query_log_file | /export/data/mysql/log/slow-query.log | +---------------------------+---------------------------------------+ show global status like '%slow%'; +---------------------+---------+ | Variable_name | Value | +---------------------+---------+ | Slow_launch_threads | 1351 | | Slow_queries | 1012685 | +---------------------+---------+ 打开慢查询日志可能会对系统性能有一点点影响,如果你的MySQL是主-从结构,可以考虑打开其中一台从服务器的慢查询日志,这样既可以监控慢查询,对系统性能影响又小,另mysql有自带的命令mysqldumpslow可进行查询,例下列命令可以查出访问次数最多的20个sql语句 mysqldumpslow -s c -t 20 host-slow.log 2. 连接数 经常会遇见”MySQL: ERROR 1040: Too manyconnections”的情况,一种是访问量确实很高,MySQL服务器抗不住,这个时候就要考虑增加从服务器分散读压力,另外一种情况是MySQL配置文件中max_connections值过小: show variables like 'max_connections'; +-----------------+-……
SE_Gao 2024-02-2618 0 0 -
MySQL查看数据库及表容量大小并排序
查看所有数据库容量大小 select table_schema as '数据库', sum(table_rows) as '记录数', sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)', sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)' from information_schema.tables group by table_schema order by sum(data_length) desc, sum(index_length) desc; 查看所有数据库各表容量大小 select table_schema as '数据库', table_name as '表名', table_rows as '记录数', truncate(data_length/1024/1024, 2) as '数据容量(MB)', truncate(index_length/1024/1024, 2) as '索引容量(MB)' from information_schema.tables order by data_length desc, index_length desc; 查看指定数据库容量大小 查看your_table_name表 select table_schema as '数据库', sum(table_rows) as '记录数', sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)', sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)' from information_schema.tables where table_schema='your_table_name'; 查看指定数据库各表容量大小 查看your_table_name表 select table_schema as '数据库', table_name as '表名', table_rows as '记录数', truncate(data_length/1024/1024, 2) as '数据容量(MB)', truncate(index_length/1024/1024, 2) as '索引容量(MB)' from information_schema.tables where table_schema='your_table_name' order by data_length desc, index_length desc;
SE_Gao 2024-02-2325 0 0 -
MySQL修改某个字段(替换关键字内容)
mysql修改某个字段(替换关键字内容),UPDATE 表名 SET 字段名= REPLACE( 替换前的字段值, '替换前关键字', '替换后关键字' ) WHERE 条件。 举例: update goods_table SET goods_name = REPLACE( goods_name, '2017', '2018' ) where goods_name like '%2017%'; 原来字段“2017新款”,执行之后“2018新款”
SE_Gao 2024-02-2211 0 0 -
MySQL查看数据库表容量大小
本文介绍MySQL查看数据库表容量大小的命令语句,提供完整查询语句及实例,方便大家学习使用。 1. 查看所有数据库容量大小 select table_schema as '数据库', sum(table_rows) as '记录数', sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)', sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)' from information_schema.tables group by table_schema order by sum(data_length) desc, sum(index_length) desc; 2. 查看所有数据库各表容量大小 select table_schema as '数据库', table_name as '表名', table_rows as '记录数', truncate(data_length/1024/1024, 2) as '数据容量(MB)', truncate(index_length/1024/1024, 2) as '索引容量(MB)' from information_schema.tables order by data_length desc, index_length desc; 3. 查看指定数据库容量大小 例:查看mysql库容量大小 select table_schema as '数据库', sum(table_rows) as '记录数', sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)', sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)' from information_schema.tables where table_schema='mysql'; 4. 查看指定数据库各表容量大小 例:查看mysql库各表容量大小 select table_schema as '数据库', table_name as '表名', table_rows as '记录数', truncate(data_length/1024/1024, 2) as '数据容量(MB)', truncate(index_length/1024/1024, 2) as '索引容量(MB)' from information_schema.tables where table_schema='mysql' order by data_length desc, index_length desc;
SE_Gao 2024-02-2118 0 0 -
MySQL8.0对比MySQL5.7的性能提升及优化
工作中,经常用到Mysql,但是同事们因为对MySQL5.7比较熟悉,往往都是拿MySQL8.0直接当作MySQL5.7使用,其实这个就有点资源浪费了,我们应该好好了解MySQL8.0一些性能提升的地方。特总结如下: 一、MySQL 8.0相比MySQL 5.7,有多方面的改进,以下是其中一些方面的比较: 1.1 JSON处理 MySQL 8.0相比MySQL 5.7,对JSON数据类型的支持更加完善。MySQL 8.0可以直接在JSON数据中进行搜索、排序和过滤,并且支持JSON表达式索引,大大提高了处理JSON数据的效率和性能。 1.2 更好的性能和可扩展性 MySQL 8.0相比MySQL 5.7,在性能和可扩展性方面都有很大的提升。MySQL 8.0引入了新的多线程架构,可以更好地利用多核处理器,同时也提高了并发读写的能力。此外,MySQL 8.0还支持更多的存储引擎,包括InnoDB、MyISAM、Memory、CSV、Blackhole、Archive等等。 1.3 更丰富的数据类型 MySQL 8.0相比MySQL 5.7,支持更丰富的数据类型,包括YEAR(4)、GEOMETRY、POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION等等。这些数据类型的支持可以更好地满足不同应用场景的需求。 1.4 更好的安全性 MySQL 8.0相比MySQL 5.7,在安全性方面也有很大的提升。MySQL 8.0引入了新的密码验证插件,使用更加安全的加密算法,提高了密码的安全性。此外,MySQL 8.0还支持更多的安全特性,包括增强的SSL/TLS支持、更加严格的密码策略、更加灵活的用户管理等等。 1.5 小结 MySQL 8.0相比MySQL 5.7在多方面都有很大的改进,包括JSON处理、性能和可扩展性、数据类型、安全性等等。MySQL 8.0的改进使其更加适合处理大规模的数据和高并发的请求,同时也提高了数据的处理效率和安全性。 二、MySQL 8.0相比MySQL 5.7,在配置方面有一些不同之处。下面列出了一……
SE_Gao 2024-02-2089 0 0 -
浅谈MySQL5.7和MySQL8.0的区别
MySQL 5.7和MySQL 8.0是两个不同的MySQL数据库版本,它们之间有以下一些主要区别: 性能改进:MySQL 8.0相对于MySQL 5.7有一些性能改进。其中包括更好的查询优化器、更高效的查询执行计划生成、更好的索引算法和并行查询等。这些改进可以提高查询性能和整体系统性能。 JSON支持:MySQL 8.0引入了对JSON数据类型的原生支持,包括JSON数据的存储、查询和索引。这使得在MySQL中处理和操作JSON数据变得更加方便和高效。 事务特性:MySQL 8.0引入了一些新的事务特性,如原子性DDL(Data Definition Language)操作,即使在执行DDL操作期间也能保持事务的原子性。此外,MySQL 8.0还支持多个并发数据字典实例,从而提高了元数据操作的并发性能。 安全性增强:MySQL 8.0在安全性方面进行了一些增强。它引入了更严格的密码策略,支持更强的身份验证机制,如SHA-256和RSA密钥验证等。此外,MySQL 8.0还提供了更好的安全审计功能和更细粒度的访问控制。 其他改进:MySQL 8.0还带来了一些其他改进,如更好的故障恢复能力、更高级的查询执行计划分析工具、更好的自管理性能和更丰富的SQL语法支持。 需要注意的是,升级到新的MySQL版本需要进行充分的测试和评估,以确保应用程序和数据库的兼容性,并选择最适合你的需求和环境的版本。
SE_Gao 2024-02-1930 0 0 -
解决 WordPress 后台仪表盘慢问题
WordPress,进入后台,会在一定时间内,调用两个函数。这两个函数,都会访问WordPress服务器,而国内大部分都访问不通,所以会导致5秒超时,两个函数,至少造成10秒卡顿。 两个函数,无法通过插件解决。所以,必须手动修改文件。 wp_check_php_version 判断用户是否需要更新PHP版本。(傻逼WordPress多管闲事),这个函数,有hook钩子,但是,但是!是否hook,都会先访问一遍。 代码位置:wp-admin/includes/misc.php 直接添加代码:return true; wp_check_browser_version 判断用户是否需要更新浏览器 这个函数没钩子,不管怎么都会访问。 代码位置:wp-admin/includes/dashboard.php 直接添加代码:return false; 这样操作,至少帮你节省10秒时间。
SE_Gao 2024-02-1519 0 0 -
第三方服务器桌面云替换系统盘教程
一:客户需求: 1. 某某客户系统盘寿命即将到期,主机系统盘需全部替换掉 二.调研及解决思路 1. 检查服务器系统盘是否有做raid(无raid)且服务器为第三方服务器。 2. 桌面云版本为5.5.3.r2 支持走重建系统。 3. 集群为三节点,前两台走重建系统,最后一台走替换主机。(因为两个主机都是新替换的新主机,新主机上没有主机备份,) 4. 重建系统需和源ip一致,替换主机需重新配置ip。 5. 替换主机需和源集中内主机的补丁包一致 6. 第三方服务器无网口和签名文件。 7. 检测副本一致性 8. 提前将虚拟机迁移出去,做好备份,防止意外。 9. 替换完成后再次检查副本一致性 三.详细解决步骤 1.检查副本一致性 2.迁移需要替换系统盘的主机上的虚拟机,及关闭主机 3.直接拔出系统盘,替换上新的系统盘 4.开始安装系统,直接选择启动项,选择u盘启动 5.开始正常安装系统 6.因为是重建系统,所以需要配置与替换系统盘的主机的IP相同,选择任意网口即可,这里我们选择原接口 7.到这里就已经完成大部分了,开始重建系统盘, 8.密码验证,注密码为初始密码 9.等待系统盘重建,与数据同步完成即可,第二台主机亦是如此 10.前两台主机完成后,第三台主机选择替换主机,出现替换主机失败 当时前期调研不够准确,所以这里出现了失败,登录控制台修改IP,继续替换主机 11.开始替换主机 12.下一步即可 13.如果出现主机名错误,点击确定后,主机会自动修改名字,且重启,需重新在替换一次 14.下一步即可 15.点击完成,等待数据同步 16.注,如果遇到系统盘替换之后,主机无法找到对应的系统,可以将除系统盘之外的磁盘全部拔掉,在去开机,
SE_Gao 2024-01-3012 0 0
升级版本
评论于 华为2288h v5 对iBMC上报Nand Flash预留块不足10%告警的说明