MongoDB 7.0 动态 WiredTiger tickets
2023-12-16 13:46 abce 阅读(116) 评论(0) 编辑 收藏 举报在WiredTiger存储引擎中,WiredTiger tickets提供了并发控制机制。这些tickets分为读tickets和写tickets。
当多个操作,比如读和写尝试并发访问数据库,WiredTiger使用tickets来确保这些操作不会冲突,从而保证数据的完整性和性能。
WiredTiger中的"tickets"实际上是一种资源管理机制,用于限制同时进行的并发读写操作的数量。每当一个读操作或写操作开始时,它需要从相应的票池中获取一个票,操作完成后,票会被返回到池中。如果所有的票都被使用了,新的操作就必须等待,直到有票可用。
在MongoDB 7.0之前的版本中,wiredTigerConcurrentReadTransactions、wiredTigerConcurrentWriteTransactions变量控制并发读/写事务进入WiredTiger存储引擎的数量,在MongoDB 7.0中,默认是128个tickets。
db.runCommand({ getParameter: 1, wiredTigerConcurrentReadTransactions: 1 }); { "wiredTigerConcurrentReadTransactions" : 128, [...]} db.runCommand({ getParameter: 1, wiredTigerConcurrentWriteTransactions: 1 }); { "wiredTigerConcurrentWriteTransactions" : 128, [...]}
MongoDB 7.0中,这两个变量变成动态的了。
db.runCommand({ getParameter: 1, wiredTigerConcurrentReadTransactions: 1 }); { wiredTigerConcurrentReadTransactions: 0, [...]} db.runCommand({ getParameter: 1, wiredTigerConcurrentWriteTransactions: 1 }); { wiredTigerConcurrentWriteTransactions: 0, [...]}
db.serverStatus().wiredTiger.concurrentTransactions.read.totalTickets 12 db.serverStatus().wiredTiger.concurrentTransactions.write.totalTickets 12
MongoDB 7.0采用了全新的算法来动态管理tickets。此外,在MongoDB 7.0之前,wiredTigerConcurrentReadTransactions、wiredTigerConcurrentWriteTransactions变量只是适用于WiredTiger存储引擎;自7.0开始,还适用于In-Memory存储引擎。
值得一提的是,有了这一新变化后,应全面检查 WiredTiger 指标,而不是将其作为一个单独的部分,否则可能会得出错误的结论。