1. 程式人生 > >[MySQL] 生產環境MySQL資料庫事務一直在RUNNING

[MySQL] 生產環境MySQL資料庫事務一直在RUNNING

前言:

運營人員反映,有一單子提交卡住了,頁面一直沒有返回。

1,剛開始懷疑是應用伺服器或者db壓力過高hang住了,馬上去check應用伺服器以及db的負載,看起來都OK,蠻低的,應該不是DB效能問題。

2,最後去看下是否是表鎖住了,檢視到有2個事務一直RUNNING,沒有結束。,

mysql> select * from INNODB_TRX\G;
*************************** 1. row ***************************
                    trx_id: 28573155
                 trx_state: RUNNING
               trx_started: 2014-08-12 15:27:57
     trx_requested_lock_id: NULL
          trx_wait_started: NULL
                trx_weight: 0
       trx_mysql_thread_id: 1662333
                 trx_query: NULL
       trx_operation_state: NULL
         trx_tables_in_use: 0
         trx_tables_locked: 0
          trx_lock_structs: 0
     trx_lock_memory_bytes: 376
           trx_rows_locked: 0
         trx_rows_modified: 0
   trx_concurrency_tickets: 0
       trx_isolation_level: READ COMMITTED
         trx_unique_checks: 1
    trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
 trx_adaptive_hash_latched: 0
 trx_adaptive_hash_timeout: 7188
          trx_is_read_only: 0
trx_autocommit_non_locking: 0


*************************** 2. row ***************************
                    trx_id: 28573065
                 trx_state: RUNNING
               trx_started: 2014-08-12 15:27:51
     trx_requested_lock_id: NULL
          trx_wait_started: NULL
                trx_weight: 11
       trx_mysql_thread_id: 1662332
                 trx_query: NULL
       trx_operation_state: NULL
         trx_tables_in_use: 0
         trx_tables_locked: 0
          trx_lock_structs: 6
     trx_lock_memory_bytes: 1248
           trx_rows_locked: 1
         trx_rows_modified: 5
   trx_concurrency_tickets: 0
       trx_isolation_level: READ COMMITTED
         trx_unique_checks: 1
    trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
 trx_adaptive_hash_latched: 0
 trx_adaptive_hash_timeout: 9995
          trx_is_read_only: 0
trx_autocommit_non_locking: 0
2 rows in set (0.00 sec)


ERROR: 
No query specified


mysql> 


3,通過trx_mysql_thread_id: 1662332的去查詢information_schema.processlist找到執行事務的客戶端請求的SQL執行緒


mysql> select * from information_schema.processlist where id=1662333;
+---------+--------------+-------------------+-------------+---------+------+-------+------+
| ID      | USER         | HOST              | DB          | COMMAND | TIME | STATE | INFO |
+---------+--------------+-------------------+-------------+---------+------+-------+------+
| 1662333 | business_web | 10.2xx.3.xx:23452 | business_db | Sleep   | 1780 |       | NULL |
+---------+--------------+-------------------+-------------+---------+------+-------+------+
1 row in set (0.00 sec)



4,通過SQL執行緒,找到應用程式的IP地址以及埠10.2xx.3.xx:23452
 
進入應用伺服器,通過netstat檢索埠23452找到正在執行的應用工程的PID
[[email protected] ~]# netstat -nlatp |grep 23452
tcp        0      0 ::ffff:10.xx.3.2x:23452    ::ffff:10.xx4.3.x1:3306     ESTABLISHED 12059/java          
[[email protected] ~]# ps -eaf|grep 12059
tomcat   12059     1  1 Aug09 ?        01:19:36 /usr/java/jdk1.6.0_45/jre/bin/java -Djava.util.logging.config.file=/usr/local/app/apache-tomcat-6.0.37_7000/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms4096m -Xmx4096m -Xss2048K -XX:PermSize=256m -XX:MaxPermSize=512m -XX:NewSize=1536m -XX:MaxNewSize=3072m -Djava.endorsed.dirs=/usr/local/app/apache-tomcat-6.0.37_7000/endorsed -classpath /usr/local/app/apache-tomcat-6.0.37_7000/bin/bootstrap.jar -Dcatalina.base=/usr/local/app/apache-tomcat-6.0.37_7000 -Dcatalina.home=/usr/local/app/apache-tomcat-6.0.37_7000 -Djava.io.tmpdir=/usr/local/app/apache-tomcat-6.0.37_7000/temp org.apache.catalina.startup.Bootstrap start
root     21039 21007  0 16:00 pts/2    00:00:00 grep 12059
[
[email protected]
~]# cd /usr/local/app/apache-tomcat-6.0.37_7000/webapps/
[[email protected] webapps]# ll
總用量 68292
drwxrwxr-x. 6 tomcat tomcat     4096 8月   5 21:33 shopAdminWeb
-rw-r--r--. 1 tomcat tomcat 39126457 8月   5 21:33 shopAdminWeb.war
drwxrwxr-x. 4 tomcat tomcat     4096 8月   5 21:33 shop_service
-rw-r--r--. 1 tomcat tomcat 30792513 8月   5 21:33 shop_service.war
[[email protected] webapps]# 



5,找到工程之後,再去檢視tomcat的應用報錯資訊,如下:
--- Check the      select ID, SHOP_NAME, SHOP_CLASSIFICATION_ID, LEGAL_PERSON, CORPORATION, SHOP_TEL, ADDRESS,       ZIP_CODE, LEGAL_PERSON_MOBILE, STAT, AUTHENTICATE, CREDIT, LEVEL, SCORE, LICENSE_PATH,       BUSSINESS_RANGE, MALL_ID, FLOOR, BIS_COMPANY, STORE_NO, MANAGER_NAME, MANAGER_TEL, BRIEF, LOGO,       FAVOUR_NUM, HAS_WAREHOUSE, DESCRIPTION_FIT, SERVICE, SPEED, BACKGROUND, BIS_CONT_ID,BIS_SHOP_ID,       CREATED_DATE, UPDATED_DATE,ENGLISH_PREF     from SHOP     where SHOP_NAME = ?   .  
--- Check the SQL Statement (preparation failed).  
--- Cause: org.springframework.transaction.TransactionTimedOutException: Transaction timed out: deadline was Tue Aug 12 15:31:00 CST 2014
2014-08-12 16:23:57,746 [http-7000-6:ERROR] com.plocc.framework.exception.handler.impl.LogHandlerImpl - 出現系統異常或未處理的異常, 需要維護人員處理!異常資訊:資料庫異常!
com.plocc.framework.exception.SystemException: 資料庫異常!
at com.plocc.shop.service.impl.ShopServiceImpl.selectShopByShopName(ShopServiceImpl.java:200)
at com.plocc.shop.web.admin.ShopManagerController.addShop(ShopManagerController.java:338)
at sun.reflect.GeneratedMethodAccessor639.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.plocc.auth.filter.AuthenticationFilter.doFilter(AuthenticationFilter.java:110)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.plocc.sso.filter.SingleSingOnFilter.doFilter(SingleSingOnFilter.java:85)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)




6,現在很明顯了,應該是事務未提交,配合開發去check所有的java程式碼,發現有2處地方,在Exception e裡面忘記寫rollback了。
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
// 這裡缺乏了rollback。

}

總結:開發人員,寫資料庫事務的時候,記得在異常處理Exception的時候,別忘記了rollback。

 

相關推薦

[MySQL] 生產環境MySQL資料庫事務一直RUNNING

前言:運營人員反映,有一單子提交卡住了,頁面一直沒有返回。1,剛開始懷疑是應用伺服器或者db壓力過高hang住了,馬上去check應用伺服器以及db的負載,看起來都OK,蠻低的,應該不是DB效能問題。2,最後去看下是否是表鎖住了,檢視到有2個事務一直RUNNING,沒有結束。

mysql生產環境常用命令

sql insert evel enter HR bin proc sele comm 嘮嘮mysql的連接數 1.查看mysql的當前連接數 [root@localhost ~]# mysqladmin -uroot -p123456 status Uptime

mysql生產環境新增一臺新slave

9b2l6w言負禿寂旅潛《http://baobao.baidu.com/question/f69d74406ea559506ef583c30e33f41b?2018.09.16=qraD》 52u7pq拾孛溝晌冉噬《http://baobao.baidu.com/quest

MySQL生產環境下的主從複製啟動項

MySQL的複製引數除了我們之前搭建主從時遇到的那幾個之外,還有以下兩個: 1、log-slave-updates 這個引數用來配置從庫上是否啟動了二進位制日誌的功能,預設是不開啟的,如果開啟了那麼從庫上的更新操作將會被記錄到二進位制日誌中。 不過在級聯複製的架構中,比如某個從庫A也要作為其他伺服器的主

Mysql生產環境安全規範

一、Mysql伺服器安全規範1. 禁止應用直連DB,一般通過代理訪問2. 禁止DB公網訪問。3. 禁止生產和辦公互通,需生產環境和辦公環境隔離。4. Linux系統初始化安全選項:    1)、一些alias,寫入/etc/profile,防止誤操作            a

如何在生產環境下實現每天自動備份mysql資料庫

www.syncnavigator.cn SyncNavigator 做資料同步時所支援的資料庫型別: 支援sqlserver 2000-2014所有版本,全相容,和MYsql 4.x 、MYsql 5.x 、MYsql 6.x版本。 來源資料庫和目標資料庫可以版本不同,比如:來源資料庫

如何在生產環境下實現每天自動備份mysql數據庫

mysql mysql備份 自動備份mysql mysql數據庫備份 甘兵 1、描述 我相信很多朋友在工作都都會有這種需求,老板或領導讓你每天都要備份mysql數據庫,你該如何實現呢,是每天到一定的時間在服務器上敲一遍mysql的備份命令,還是想寫個腳本,定時定點的自動備份呢?我相信

mysql + Python3.5.2 + Django + Uwsgi + Nginx實現生產環境

ast 配置 static var pst ads sgi 服務 關閉進程 官方文檔:http://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/tutorials/Django_and_nginx.html前面已經安裝好mysql數據

生產環境配置mysql主從復制

數據安全配置mysql主從復制環境:redhat 7.3 系統 兩臺主機 一臺master 一臺slave1、主從復制的步驟1、搭建時間NTP服務器,同步時間1)建立時間同步環境,在主節點上搭建時間同步服務器時間同步在此不再重復,可翻閱上次文檔。2、防火墻開放列外,或者直接關閉3、安裝mysql此步驟不再講

Centos7.5 生產環境搭建MySQL 5.7主從

maria tps 隔離 地址 mys mov code eve get 環境:服務器兩臺:192.168.19.77 4核心,16G內存 內網隔離,不通外網192.168.19.78 4核心,16G內存 內網

踩坑經歷(七)MySQL匯出生產環境表結構和資料

在命令列視窗下執行即可 編號 需求 SQL 1 匯出資料庫為dbname的表結構(其中使用者名稱為root,密碼為dbpasswd,生成的指令碼名為db.sql) my

mysql資料庫 事務和索引

1.MySQL資料庫特性:  原子性(atomidity) 一個事務必須被視為一個不可分割的最小工作單元,整個事務中的所有操作要麼全部提交成功,要麼全部失敗回滾,對於一個事務來說,不可能只執行其中的一部分操作,這就是事務的原子性 一致性(consistency) 資料庫總是從一個一致性的狀態

Percona Mysql Galera多讀寫叢集部署生產環境實記

一、部署MySQL:yum install https://www.percona.com/redir/downloads/percona-release/redhat/latest/percona-release-0.1-6.noarch.rpm -y 安裝percona的倉庫檔案。yum install

Percona Mysql Galera多讀寫集群部署生產環境實記

trap sum 數據表 -- select interval red pau ads 一、部署MySQL:yum install https://www.percona.com/redir/downloads/percona-release/redhat/latest/

遇到mysql資料庫事務隔離級別相關的小坑

幾乎所有軟體工程師都知道,mysql有4種事務隔離級別,但是實際開發過程中可能有時候忽略這個小細節,有時候可能是本來就沒有考慮過,有時候也可能是其他的原因,比如我這次踩到的小坑。 事情還原: 1、需求一:是新建一個商戶,但是客戶要求在建立商戶的時候要預設給他們開

MySQL資料庫事務處理

事務處理用於有效記錄某機構感興趣的業務活動(稱為事務)的資料處理(例如銷售、供貨的定購或貨幣傳輸)。通常,聯機事務處理 (OLTP) 系統執行大量的相對較小的事務。——百度百科 事務處理是將多個操作或者命令一起執行,所有命令全部成功執行才意味著該事務的成功,任何一個命令失敗

MYSQL資料庫事務4種隔離級別及7種傳播行為

事務的特性: 原子性:事務的不可分割,組成事務的各個邏輯單元不可分割。 一致性:事務執行的前後,資料完整性保持一致。 隔離性:事務執行不應該受到其他事務的干擾。 永續性:事務一旦結束,資料就持久化到資料庫中。 檢視/設定隔離級別    檢視:SELECT @@tx

mysql資料庫——事務

為什麼會有事務:為了保證流程的完整執行。 事務是一組不可被分割的SQL語句的集合,是一組連續的資料庫操作, 作為一個單一的工作單元來執行。這一組操作要麼全部成功執行,要麼全部回滾 最經典的就是銀行轉賬,一個轉出,一個收到。 mysql 事務主要用於處理操作量大,複雜度高的資料, 事物處

資料庫事務MySQL事務總結

事務特點:ACID 從業務角度出發,對資料庫的一組操作要求保持4個特徵: Atomicity(原子性):一個事務必須被視為一個不可分割的最小工作單元,整個事務中的所有操作要麼全部提交成功,要麼全部失敗回滾,對於一個事務來說,不可能只執行其中的一部分操作。 Consistency(一致性):資料庫

mysql關於資料庫事務隔離級別測試(包含例項測試語句,及測試結果對比)

1、知識點; 事務的四大特性 ACID ;  原子性(Atomic):事務是一個整體(無論在該事務中操作任何CRUD),要不全部執行,要不全部不執行。(資料庫能夠進行操作的最小的邏輯單元) 一致性(Consistent):組成一個事務的操作是CRUD,要麼全部成功,要