pymysql 非執行緒安全導致的故障.
mysqldb 這個python 驅動只支援到 python 2 .
轉到python 3 後. 無法使用了.
啟用 pymysql 這個驅動.
在投入生產後, 發現了一些問題.
在使用較大規模的 for id in [list]:
db.query (xxxxxxxxx)
查詢資料庫的時候, 出現了一些比較奇怪的網路連線層面的報錯.
資料包 的 頭位元組 格式錯誤.
如果只是執行單個查詢則是不會報錯.
經過排查, 發現這是pymysql 的bug 或者缺陷.
即 PYmysql 不是執行緒安全的. 由於我們自己的元件 dba模組.
對資料庫查詢做了包裝.
導致 在某些情況情況下. python 的程式碼最佳化模組.
對程式碼的最佳化, 出現了並行的情況.
即前一個sql 查詢沒有返回的情況下, 另一個執行緒啟動了並從同一個資料庫控制程式碼讀取資料.
導致了 資料包的格式錯誤.
改進方案:
1. 對資料庫的連線 增加執行緒鎖.
每一次查詢 都加鎖. 在異常處理中也要同時加上解鎖程式碼.
2. 更換為mysql.com 提供的 官方的 mysql-connector-python 驅動. 目前沒有發現問題.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-2684692/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 執行緒的活性故障執行緒
- 執行SQL查詢導致磁碟耗盡故障演示SQL
- 故障分析 | Federated 儲存引擎表導致監控執行緒處於 Opening table 狀態儲存引擎執行緒
- 【Java多執行緒】執行緒安全的集合Java執行緒
- @Transactional 中使用執行緒鎖導致了鎖失效執行緒
- WebMagic多執行緒導致註解失效問題Web執行緒
- 記一次執行緒池配置導致的ThreadLocal清空執行緒thread
- 執行緒安全執行緒
- 多執行緒系列之 執行緒安全執行緒
- iOS 多執行緒之執行緒安全iOS執行緒
- Java執行緒(一):執行緒安全與不安全Java執行緒
- 記錄一個LifeCycle 多執行緒使用導致的崩潰執行緒
- Json序列化與反序列化導致多執行緒執行速度和單執行緒執行速度一致問題JSON執行緒
- 【多執行緒總結(二)-執行緒安全與執行緒同步】執行緒
- 什麼是執行緒安全和執行緒不安全執行緒
- 多執行緒中自定義執行緒池與shiro導致的許可權錯亂問題解決執行緒
- HttpClient引發的執行緒數過多導致應用崩潰HTTPclient執行緒應用崩潰
- 案例解析:執行緒池使用不當導致的系統崩潰執行緒
- Java執行緒安全Java執行緒
- 執行緒安全(二)執行緒
- 什麼時候執行緒不安全?怎樣做到執行緒安全?怎麼擴充套件執行緒安全的類?執行緒套件
- Java 多執行緒基礎(四)執行緒安全Java執行緒
- iOS多執行緒安全-13種執行緒鎖?iOS執行緒
- Java CompletableFuture因在上下文中使用共享變數,導致執行緒安全問題Java變數執行緒
- 非同步/同步,阻塞/非阻塞,單執行緒/多執行緒概念梳理非同步執行緒
- 執行緒崩潰為什麼不會導致 JVM 崩潰執行緒JVM
- 多執行緒,你覺得你安全了?(執行緒安全問題)執行緒
- 併發與多執行緒之執行緒安全篇執行緒
- 多執行緒與高併發(二)執行緒安全執行緒
- 小度分享-【多執行緒工作及執行緒安全】執行緒
- 併發程式設計之多執行緒執行緒安全程式設計執行緒
- iOS開發基礎——執行緒安全(執行緒鎖)iOS執行緒
- ArrayList 的執行緒安全問題執行緒
- 保障執行緒安全的設計執行緒
- 容器不是執行緒安全執行緒
- ConcurrentHashMap執行緒安全嗎?HashMap執行緒
- Concurrency(四:執行緒安全)執行緒
- 執行緒安全性執行緒