mongodb-performance-数据库性能

过客流隙

贡献于2016-10-17

字数:3839 关键词: NoSQL数据库 Java Python Go

MongoDB Performance How to monitor, tune, test, and plan 如何监控,调优,测试和容量规划 Agenda 我们如何测试MongoDB 性能 MongoDB 性能测试工具 如何进行数据库性能监控和应该注意什么 系统调优(system tuning) 容量规划(capacity planning) 关于 wiredTiger/MMAPv1/MMAPv0 About me 张睿 (Zhang Rui) Sr. Performance Engineer with focus on: - Distribute System Performance (MongoDB 分布系统性 能,sharding/replica,etc) - Performance infrastructure - Workload generator (负载生成器) - Linux system profiling(Linux 系统性能分析) How we test MongoDB Evergreen 是我们自己的持续集成服务 有大量基于Javascript 的正确性测试用例 几种性能测试: micro benchmarking:关注算法/功能的性能,测试每 个 commit system performance:系统性能测试,不同的cluster。 每12 小时运行一次 longevity:关注系统稳定性,连续执行48+小时以上, shard+replica Perf Testing Tools 性能测试工具 benchRun hammer YCSB Flashback benchRun MongoDB Shell自带的性能测试工具 使用介绍文档 支持多线程操纵,和常用的MongoDB 操作 简单宜用 你可以提交功能要求Jira ticket 一个简单例子: benchRun Example > res = benchRun( { ops : [ { ns : "test.foo" , op : "insert" , doc : { y : { "#RAND_INT" : [0, 1000] } } } ] , parallel : 20, seconds : 1 } ); > print( "20 threads insert/sec: " + res.insert ); { "note" : "values per second", "errCount" : NumberLong(0), "trapped" : "error: not implemented", "insertLatencyAverageMicros" : 7.08265, "totalOps" : NumberLong(40000), "totalOps/s" : 39276.294988541136, "findOne" : 0, "insert" : 39276.294988541136, "delete" : 0, "update" : 0, "query" : 0, "command" : 0 } benchRun output hammer.mongo 基于Go 的mongodb 性能测试工具 Github Bootstrap script: wget https://raw.githubusercontent.com/rzh/hammer.mongo/master/scripts/bootstrap.sh -O - | bash ./simple_insert.sh 高性能,宜于扩展 欢迎pull request YCSB 基于Java 的普适的Kay-Value 数据库测试软 件 有很多版本,建议使用 10gen-labs 版本 可以测试 insert/update/read/remove 可以控制比例,比如80% 读/20%写 Flashback Facebook/Parse 的性能测试工具 Github 基于record & playback,测试数据库需要线上 数据库的数据复制 基于Go 非常适合于对现有的线上服务进行容量规划 MongoDB Perf Monitoring/性能监控 Cloud Manager mongostat db.serverStatus() Linux 系统性能 mtools Cloud Manager mongostat mongodb 自带的监视工具 db.serverStats() MongoDB 内部详细的统计,wiredTiger 显示 273 个数据 一些例子: db.serverStatus().opcounters.insert ...uptime ...locks.Global.timeAcquiringMicros.W ...metrics.cursor.open.total ...wiredTiger.cache System Statistic 系统性能监控 常用的Linux 命令,比如 sysstats package 常用 iostats/pidstats iostats -x 1 pidstats -p `pidof mongod` mtools Github 一系列基于Python 的工具 分析日志文件,可视化Slow Queries,和一些 测试工具 mplotqueries mlogfilter mlaunch mtool 例子 线上应该注意的 存储使用 要监控空余空间的使用 存储 I/O 带宽的使用情况 内存使用 多少内存合适? indexes 也要使用内存 Slow queries 对系统的性能影响很大 CPU 是否性能瓶颈? System Tuning/系统调优 MongoDB production note (URL) 基于不同云服务商的建议(URL) 存储分配:建议数据库文件,Journal和日志每 个都有自己的独立的硬盘 文件系统,建议使用XFS Capacity Planning 容量规划 准备工作 准备数据(线上数据库的拷贝?) 硬件,scale down并不一定准确 Workload 测试数据 (比如数据量大小,尽量接近线上数据库) Query的分布 (uniform? zipfian?) Tool benchRun/flashback 自己开发的工具 存储引擎-MMAPv0 3.0 之前的存储引擎 DB 锁 (2.0 以前是全局锁) 100% 读可以并发 一个DB 一次只能有一个写操作,所有这个DB 的读要等锁 存储引擎-MMAPv1 3.0 引入的存储引擎,缺省的存储方式 Collection 锁(CLL) 100% 读可以并发 一个Collection 一次只能有一个写操作,所有 这个Collection的读要等锁 性能于MMAPv0 相当 存储引擎-wiredTiger 全新的存储引擎 Document Level Locking(DLL) 读写可以完全并发执行(不同document) 极大地提高了写的性能 100%读的性能和MMAP 相当 混合操作有不同程度的提高 连接 benchRun 文档: https://www.mongodb.org/about/contributors/reference/js-benchmarking-harness/ Hammer Git 连接: https://github.com/rzh/hammer.mongo YCSB 10gen-lab fork: https://github.com/10gen-labs/YCSB Flashback Git: https://github.com/ParsePlatform/flashback mtool Git: https://github.com/rueckstiess/mtools mongodb production notes: http://docs.mongodb.org/manual/administration/production-notes/ http://docs.mongodb.org/ecosystem/platforms/

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档