本文由 Jilen 發表在 ScalaCool 團隊博客。java
上一篇文章分析 Mysql 異步驅動的性能。本文闡述 Mysql Async 使用時須要注意的問題mysql
雖然 Mysql Async 性能出色,但使用過程當中仍是遇到了各類各樣的問題git
假如你的業務中存在不少中 statement,這可能會致使 PreparedStatement
數量不夠。
一般能夠經過如下方法解決:github
PreparedStatement
數量設置由於該驅動一個連接不能同時執行多個 SQL 語句(受限於MySQL協議)因此sql
conn.inTransaction { c =>
val fa = c.sendQuery("xxx")
val fb = c.sendQuery("yyy")
}複製代碼
這樣的代碼就不能正確運行,必須改爲以下串行或等價的形式異步
conn.inTransaction { c =>
for {
a <- c.sendQuery("xxx")
b <- c.sendQuery("yyy")
} yield (a, b)
}複製代碼
Mysql-connector-java
支持客戶端 PreparedStatement,從而能夠開啓將多個插入重寫爲一個批量插入的功能(rewriteBatchedStatements)。
批量插入語句能夠減小鎖的次數,從而大幅大幅提高性能的,這在一些插入頻繁場景(如 akka-persistence)很是有用。async
要解決這個問題,只能手工生成 批量插入語句
。maven
Netty 相關的設置硬編碼在實現裏,沒法自定義 EventLoop
也沒法開啓 Linux 平臺 native epoll
支持(該選項能夠進一步提高性能,減小 GC 壓力)。oop
使用前文提到的版本里已經默認開啓了 native epoll
支持。post