怎样实现mysql查询 每秒一万次

怎样实现mysql查询 每秒一万次,第1张

随着Web应用变得越来越复杂,单纯的MySQL + Memcached似乎已满足不了数据存储的需求,一些企业纷纷转向NoSQL方案,比如MongoDB、CouchDB、 TokyoCabinet/Tyrant、Cassandra等。在他们看来,如果数据访问模式不是很复杂,用不上SQL数据库。然而,DeNA公司截然相反,他们选择了 "only MySQL" 的方案,且获得了远远超越NoSQL的性能

该公司仍在使用MySQL + Memcached,Memcached主要用于前端Cache,比如预处理的HTML、计数和摘要信息等,但数据行并不放在Cache里,而是直接从数据库查,因为普通的服务器就可以获得75万次每秒的查询,当前又有哪种NoSQL可以做到呢?

可以使用sysbench、super-smack、mysqlslap等工具测试MySQL性能,比如

[matsunobu@host ~]$ mysqlslap --query="select user_name,..

from test.user where user_id=1" \

--number-of-queries=10000000 --concurrency=30 --host=xxx -uroot

然后使用如下命令得到每秒读取的行数,

[matsunobu@host ~]$ mysqladmin extended-status -i 1 -r -uroot \

| grep -e "Com_select"

...

| Com_select | 107069 |

| Com_select | 108873 |

| Com_select | 108921 |

| Com_select | 109511 |

| Com_select | 108084 |

| Com_select | 108483 |

| Com_select | 108115 |

...

可以使用vmstat和Oprofile等工具诊断系统瓶颈。

MySQL Cluster因为性能问题一直受人批判,为改善这种情况引入了NDBAPI,使得性能提升了N倍。但对于非集群情况怎么优化呢?通过MySQL瓶颈分 析,发现大部分时间花费在SQL解析和表 *** 作上,如果绕过这层 *** 作直接存取存储引擎,可大大提升性能,MySQL的插件HandlerSocket正是由 此获得了每秒75万次查询 *** 作的性能,这个评测数据无疑会颠覆整个NoSQL世界。另外,HandlerSocket支持批量读取和写 *** 作,这进一步提升 了它的性能。

mysql每秒查询结果数qps怎么得到

(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 命中率

mysql>show 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

查看延时时间

以目前的硬件条件,无论你怎么优化,都不可能在生产环境中做到“每秒1000次的并发访问”,除非你拿来做测试的是只有几条数据的表和最简单的查询。 如果你完全不懂负载平衡,读写分离,群集这些概念的话。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6163841.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-16
下一篇 2023-03-16

发表评论

登录后才能评论

评论列表(0条)

保存