重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
mysql每秒查询结果数qps怎么得到
创新互联建站从2013年开始,先为工布江达等服务建站,工布江达等地企业,进行企业商务咨询服务。为工布江达企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
(1)QPS(每秒Query量)
QPS = Questions(or Queries) / seconds
mysql show global status like 'Question%';
(2)TPS(每秒事务量)
TPS = (Com_commit + Com_rollback) / seconds
mysql show global status like 'Com_commit';
mysql show global status like 'Com_rollback';
(3)key Buffer 命中率
mysqlshow global status like 'key%';
key_buffer_read_hits = (1-key_reads / key_read_requests) * 100%
key_buffer_write_hits = (1-key_writes / key_write_requests) * 100%
(4)InnoDB Buffer命中率
mysql show status like 'innodb_buffer_pool_read%';
innodb_buffer_read_hits = (1 - innodb_buffer_pool_reads / innodb_buffer_pool_read_requests) * 100%
(5)Query Cache命中率
mysql show status like 'Qcache%';
Query_cache_hits = (Qcahce_hits / (Qcache_hits + Qcache_inserts )) * 100%;
(6)Table Cache状态量
mysql show global status like 'open%';
比较 open_tables 与 opend_tables 值
(7)Thread Cache 命中率
mysql show global status like 'Thread%';
mysql show global status like 'Connections';
Thread_cache_hits = (1 - Threads_created / connections ) * 100%
(8)锁定状态
mysql show global status like '%lock%';
Table_locks_waited/Table_locks_immediate=0.3% 如果这个比值比较大的话,说明表锁造成的阻塞比较严重
Innodb_row_lock_waits innodb行锁,太大可能是间隙锁造成的
(9)复制延时量
mysql show slave status
查看延时时间
运行中的mysql状态查看
(1)QPS(每秒Query量)
QPS
=
Questions(or
Queries)
/
seconds
mysql
show
global
status
like
'Question%';
(2)TPS(每秒事务量)
TPS
=
(Com_commit
+
Com_rollback)
/
seconds
mysql
show
global
status
like
'Com_commit';
mysql
show
global
status
like
'Com_rollback';
(3)key
Buffer
命中率
mysqlshow
global
status
like
'key%';
key_buffer_read_hits
=
(1-key_reads
/
key_read_requests)
*
100%
key_buffer_write_hits
=
(1-key_writes
/
key_write_requests)
*
100%
(4)InnoDB
Buffer命中率
mysql
show
status
like
'innodb_buffer_pool_read%';
innodb_buffer_read_hits
=
(1
-
innodb_buffer_pool_reads
/
innodb_buffer_pool_read_requests)
*
100%
(5)Query
Cache命中率
mysql
show
status
like
'Qcache%';
Query_cache_hits
=
(Qcahce_hits
/
(Qcache_hits
+
Qcache_inserts
))
*
100%;
(6)Table
Cache状态量
mysql
show
global
status
like
'open%';
比较
open_tables
与
opend_tables
值
(7)Thread
Cache
命中率
mysql
show
global
status
like
'Thread%';
mysql
show
global
status
like
'Connections';
Thread_cache_hits
=
(1
-
Threads_created
/
connections
)
*
100%
(8)锁定状态
mysql
show
global
status
like
'%lock%';
Table_locks_waited/Table_locks_immediate=0.3%
如果这个比值比较大的话,说明表锁造成的阻塞比较严重
Innodb_row_lock_waits
innodb行锁,太大可能是间隙锁造成的
(9)复制延时量
mysql
show
slave
status
查看延时时间
(10)
Tmp
Table
状况(临时表状况)
mysql
show
status
like
'Create_tmp%';
Created_tmp_disk_tables/Created_tmp_tables比值最好不要超过10%,如果Created_tmp_tables值比较大,
可能是排序句子过多或者是连接句子不够优化。
在linux下安装mysql数据库并配置的流程比较繁琐,需要耐心调试,具体方法和步骤如下:
1.查找以前是否安装有mysql,使用下面命令:
rpm -qa|grep -i mysql
如果显示有如下包则说明已安装mysql
mysql-4.1.12-3.RHEL4.1
mysqlclient10-3.23.58-4.RHEL4.1
2.如果已安装,则需要删除已安装的数据库,使用以下命令来删除数据库
删除命令:rpm -e --nodeps 包名
( rpm -ev mysql-4.1.12-3.RHEL4.1 )
删除老版本mysql的开发头文件和库
命令:rm -fr /usr/lib/mysql
rm -fr /usr/include/mysql
注意:卸载后/var/lib/mysql中的数据及/etc/my.cnf不会删除,如果确定没用后就手工删除
rm -f /etc/my.cnf
rm -fr /var/lib/mysql
3.下载mysql的rpm包
可以通过wget下载具体的地址因为不能用链接请大家去官网去找
(1)MySQL-server-5.6.10-1.rhel5.x86_64.rpm:MySQL服务器;
(2)MySQL-client-5.6.10-1.rhel5.x86_64.rpm:MySQL客户端;
(3)MySQL-devel-5.6.10-1.rhel5.x86_64.rpm:Mysql开发依赖包。
下载后放到Liunx服务器中。
4.安装MySQL Server的rpm包
rpm -ivh MySQL-server-5.6.21-1.linux_glibc2.5.x86_64.rpm
安装完成后会生成root用户的随机密码,请使用“cat /root/.mysql_secret”或类似命令进行查看。
5.安装MySQL客户端
rpm -ivh MySQL-client-5.6.21-1.linux_glibc2.5.x86_64.rpm
6.安装MySQL开发依赖包
rpm -ivh MySQL-devel-5.6.21-1.linux_glibc2.5.x86_64.rpm
7.启动msyql
安装完成后mysql是没有启动的,运行mysql命令会提示如下错误:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
可使用如下命令启动MySQL:
service mysql start
或者使用如下命令:
/etc/init.d/mysql start
可使用SET PASSWORD命令修改root用户的密码,参考如下:SET PASSWORD = PASSWORD('root123456');
8.登录MySQL
使用mysql命令登录MySQL服务器,运行MySQL的命令时,会提示需要设置root用户密码。
9.设置开机自启动
/etc/init.d/mysql start
设置完成后重启系统,使用natstat –nat命令可看到MySQL的3306端口。
10.至此已经安装好了mysql数据库,当然现在我们的数据库还不支持远程连接,远程连接会出现以下代码:1130,ERROR 1130: Host 192.168.0.10 is not allowed to connect to this MySQL server,可以通过以下以下来解决。
11.改表法:在本机登入mysql后,更改“mysql”数据库里的“user”表里的“host”项,从”localhost”改为'%'。
mysql
mysqluse mysql;
mysqlselect 'host' from user where user='root
12.到此为止,mysql数据库在linux中安装完毕。
QPS、TPS、IOPS都是查询的一种。
查询对象是用来操作数据库中的记录对象。利用它可以按照一定的条件或准则从几个表中筛选出需要操作的字段,并可以把它们集中起来,形成动态数据集。用户可以浏览、查询、打印、甚至修改这个动态数据集中的数据。
通过查询,可以查找和检索满足指定条件的数据,包括几个表中的数据。也可以使用查询同时更新或删除几个记录,以及对数据执行预定义或自定义的计算。
使用查询可以回答有关数据的特定问题,而这些问题通过直接查看表数据很难解决。可以使用查询筛选数据,执行数据计算和汇总数据,还可以使用查询自动执行许多数据管理任务,并在提交数据更改之前查看这些更改。
查询是对数据结果、数据操作或者这两者的请求。可以使用查询回答简单问题,执行计算、合并不同表中的数据,甚至添加、更改或删除表数据。用于从表中检索数据或进行计算的查询叫做选择查询,用于添加、更改或删除数据的查询叫做操作查询。
还可以使用查询为窗体或报表提供数据。在设计良好的数据库中,要使用窗体或报表显示的数据通常位于几个不同的表中,通过使用查询,可以在设计窗体或报表之前组合要使用的数据。
MySQL 主从一直是面试常客,里面的知识点虽然基础,但是能回答全的同学不多。
比如楼哥之前面试小米,就被问到过主从复制的原理,以及主从延迟的解决方案,因为回答的非常不错,给面试官留下非常好的印象。你之前面试,有遇到过哪些 MySQL 主从的问题呢?
所谓 MySQL 主从,就是建立两个完全一样的数据库,一个是主库,一个是从库, 主库对外提供读写的操作,从库对外提供读的操作 ,下面是一主一从模式:
对于数据库单机部署,在 4 核 8G 的机器上运行 MySQL 5.7 时,大概可以支撑 500 的 TPS 和 10000 的 QPS, 当遇到一些活动时,查询流量骤然,就需要进行主从分离。
大部分系统的访问模型是读多写少,读写请求量的差距可能达到几个数量级,所以我们可以通过一主多从的方式, 主库只负责写入和部分核心逻辑的查询,多个从库只负责查询,提升查询性能,降低主库压力。
MySQL 主从还能做到服务高可用,当主库宕机时,从库可以切成主库,保证服务的高可用,然后主库也可以做数据的容灾备份。
整体场景总结如下:
MySQL 的主从复制是依赖于 binlog 的,也就是记录 MySQL 上的所有变化并以二进制形式保存在磁盘上二进制日志文件。
主从复制就是将 binlog 中的数据从主库传输到从库上,一般这个过程是异步的,即主库上的操作不会等待 binlog 同步的完成。
详细流程如下:
当主库和从库数据同步时,突然中断怎么办?因为主库与从库之间维持了一个长链接,主库内部有一个线程,专门服务于从库的这个长链接的。
对于下面的情况,假如主库执行如下 SQL,其中 a 和 create_time 都是索引:
我们知道,数据选择了 a 索引和选择 create_time 索引,最后 limit 1 出来的数据一般是不一样的。
所以就会存在这种情况:在 binlog = statement 格式时,主库在执行这条 SQL 时,使用的是索引 a,而从库在执行这条 SQL 时,使用了索引 create_time,最后主从数据不一致了。
那么我们改如何解决呢?
可以把 binlog 格式修改为 row,row 格式的 binlog 日志记录的不是 SQL 原文,而是两个 event:Table_map 和 Delete_rows。
Table_map event 说明要操作的表,Delete_rows event用于定义要删除的行为,记录删除的具体行数。 row 格式的 binlog 记录的就是要删除的主键 ID 信息,因此不会出现主从不一致的问题。
但是如果 SQL 删除 10 万行数据,使用 row 格式就会很占空间的,10 万条数据都在 binlog 里面,写 binlog 的时候也很耗 IO。但是 statement 格式的 binlog 可能会导致数据不一致。
设计 MySQL 的大叔想了一个折中的方案,mixed 格式的 binlog,其实就是 row 和 statement 格式混合使用, 当 MySQL 判断可能数据不一致时,就用 row 格式,否则使用就用 statement 格式。
有时候我们遇到从数据库中获取不到信息的诡异问题时,会纠结于代码中是否有一些逻辑会把之前写入的内容删除,但是你又会发现,过了一段时间再去查询时又可以读到数据了,这基本上就是主从延迟在作怪。
主从延迟,其实就是“从库回放” 完成的时间,与 “主库写 binlog” 完成时间的差值, 会导致从库查询的数据,和主库的不一致 。
谈到 MySQL 数据库主从同步延迟原理,得从 MySQL 的主从复制原理说起:
总结一下主从延迟的主要原因 :主从延迟主要是出现在 “relay log 回放” 这一步,当主库的 TPS 并发较高,产生的 DDL 数量超过从库一个 SQL 线程所能承受的范围,那么延时就产生了,当然还有就是可能与从库的大型 query 语句产生了锁等待。
我们一般会把从库落后的时间作为一个重点的数据库指标做监控和报警,正常的时间是在毫秒级别,一旦落后的时间达到了秒级别就需要告警了。
解决该问题的方法,除了缩短主从延迟的时间,还有一些其它的方法,基本原理都是尽量不查询从库。
具体解决方案如下:
在实际应用场景中,对于一些非常核心的场景,比如库存,支付订单等,需要直接查询从库,其它非核心场景,就不要去查主库了。
两台机器 A 和 B,A 为主库,负责读写,B 为从库,负责读数据。
如果 A 库发生故障,B 库成为主库负责读写,修复故障后,A 成为从库,主库 B 同步数据到从库 A。
一台主库多台从库,A 为主库,负责读写,B、C、D为从库,负责读数据。
如果 A 库发生故障,B 库成为主库负责读写,C、D负责读,修复故障后,A 也成为从库,主库 B 同步数据到从库 A。
是iops吧,每秒的io量。
QPS (Query per second) (每秒查询量)
TPS(Transaction per second) (每秒事务量,如果是InnoDB会显示,没有InnoDB就不会显示)
计算方法
___________________________________________________________
QPS
Questions = SHOW GLOBAL STATUS LIKE 'Questions';
Uptime = SHOW GLOBAL STATUS LIKE 'Uptime';
QPS=Questions/Uptime
TPS
Com_commit = SHOW GLOBAL STATUS LIKE 'Com_commit';
Com_rollback = SHOW GLOBAL STATUS LIKE 'Com_rollback';
Uptime = SHOW GLOBAL STATUS LIKE 'Uptime';
TPS=(Com_commit + Com_rollback)/Uptime