sql >> データベース >  >> RDS >> Mysql

MySQLステートメントキャンセルタイマーを停止できませんでした

    (古い質問ですが、同じエラー/警告メッセージが表示されました)QueryTimeoutInterceptorでjdbcプールを使用していますか または、statement.setQueryTimeout(320)を呼び出します 働き。内部のmysqljdbc.jarスレッドを呼び出して、長時間実行されるクエリをキャンセルします。

    Tomcat hotdeploymentはそれを認識しないため、スレッドは実行されたままになり、死んだWebアプリケーションコンテキストをRAMに保持します。

      <Resource name="jdbc/BSManager" auth="Container" 
        type="javax.sql.DataSource" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
        initialSize="2" maxActive="100" maxIdle="10" maxWait="30000"    
        username="myuser" password="mypwd"
        driverClassName="com.mysql.jdbc.Driver" 
        jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.QueryTimeoutInterceptor(queryTimeout=320)"
        url="jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&amp;characterEncoding=utf8"
            validationQuery="SELECT 1" removeAbandoned="true" removeAbandonedTimeout="7200"
            testOnBorrow="true" maxAge="1800000"
      />
    

    この警告メッセージThe web application [TI] appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it このリスナーがtomcat/conf/server.xmlでアクティブ化されている場合でも発生します ファイル。クエリのタイムアウト後にデッドWebアプリケーションがリリースされるかどうかはわかりません。 MySQLjdbcドライバーでクエリタイムアウトを使用しないことにしました。

      <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" 
            classesToInitialize="com.mysql.jdbc.NonRegisteringDriver" />
    



    1. MySQLは、GROUP_CONCAT関数の連結結果を切り捨てます

    2. SQLServerのCPUパフォーマンスの問題のトラブルシューティング

    3. リレーショナルデータベースの行を削除または無効にする必要がありますか?

    4. SQLスクリプトを検証するためのコード