亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

關(guān)于JDBC與MySQL臨時表空間的深入解析

2024-07-25 19:08:57
字體:
供稿:網(wǎng)友

背景

臨時表空間用來管理數(shù)據(jù)庫排序操作以及用于存儲臨時表、中間排序結(jié)果等臨時對象,相信大家在開發(fā)中經(jīng)常會遇到相關(guān)的需求,下面本文將給大家詳細(xì)JDBC與MySQL臨時表空間的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧

應(yīng)用 JDBC 連接參數(shù)采用 useCursorFetch=true,查詢結(jié)果集存放在 mysqld 臨時表空間中,導(dǎo)致ibtmp1 文件大小暴增到90多G,耗盡服務(wù)器磁盤空間。為了限制臨時表空間的大小,設(shè)置了:

innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:2G

問題描述

在限制了臨時表空間后,當(dāng)應(yīng)用仍按以前的方式訪問時,ibtmp1文件達(dá)到2G后,程序一直等待直到超時斷開連接。 SHOW PROCESSLIST顯示程序的連接線程為sleep狀態(tài),state和info信息為空。 這個對應(yīng)用開發(fā)來說不太友好,程序等待超時之后要分析原因也缺少提示信息。

問題分析過程

為了分析問題,我們進(jìn)行了以下測試

測試環(huán)境:

mysql:5.7.16

java:1.8u162

jdbc 驅(qū)動:5.1.36

OS:Red Hat 6.4

1.手工模擬臨時表超過最大限制的場景

模擬以下環(huán)境:

ibtmp1:12M:autoextend:max:30M

將一張 500萬行的 sbtest 表的 k 字段索引刪除

運行一條 group by 的查詢,產(chǎn)生的臨時表大小超過限制后,會直接報錯:

select sum(k) from sbtest1 group by k; 
ERROR 1114 (HY000): The table '/tmp/#sql_60f1_0' is full

2.檢查驅(qū)動對 mysql 的設(shè)置

我們上一步看到,sql 手工執(zhí)行會返回錯誤,但是 jdbc 不返回錯誤,導(dǎo)致連接一直 sleep,懷疑是 mysql 驅(qū)動做了特殊設(shè)置,驅(qū)動連接 mysql,通過 general_log 查看做了哪些設(shè)置。未發(fā)現(xiàn)做特殊設(shè)置。

3.測試 JDBC 連接

問題的背景中有對JDBC做特殊配置:useCursorFetch=true,不知道是否與隱藏報錯有關(guān),接下來進(jìn)行測試:

JDBC,MySQL,臨時表空間

發(fā)現(xiàn)以下現(xiàn)象:

·加參數(shù) useCursorFetch=true時,做同樣的查詢確實不會報錯

這個參數(shù)是為了防止返回結(jié)果集過大而采用分段讀取的方式。即程序下發(fā)一個 sql 給 mysql 后,會等 mysql 可以讀結(jié)果的反饋,由于 mysql 在執(zhí)行sql時,返回結(jié)果達(dá)到 ibtmp 上限后報錯,但沒有關(guān)閉該線程,該線程處理 sleep 狀態(tài),程序得不到反饋,會一直等,沒有報錯。如果 kill 這個線程,程序則會報錯。

·不加參數(shù) useCursorFetch=true時,做同樣的查詢則會報錯

JDBC,MySQL,臨時表空間

結(jié)論

1.正常情況下,sql 執(zhí)行過程中臨時表大小達(dá)到 ibtmp 上限后會報錯;

2.當(dāng)JDBC設(shè)置 useCursorFetch=true,sql 執(zhí)行過程中臨時表大小達(dá)到 ibtmp 上限后不會報錯。

解決方案

進(jìn)一步了解到使用 useCursorFetch=true 是為了防止查詢結(jié)果集過大撐爆 jvm;

但是使用 useCursorFetch=true 又會導(dǎo)致普通查詢也生成臨時表,造成臨時表空間過大的問題;

臨時表空間過大的解決方案是限制 ibtmp1 的大小,然而 useCursorFetch=true 又導(dǎo)致JDBC不返回錯誤。

所以需要使用其它方法來達(dá)到相同的效果,且 sql 報錯后程序也要相應(yīng)的報錯。除了 useCursorFetch=true 這種段讀取的方式外,還可以使用流讀取的方式。流讀取程序詳見附件部分。

·報錯對比

·段讀取方式,sql 報錯后,程序不報錯

·流讀取方式,sql 報錯后,程序會報錯

·內(nèi)存占用對比

這里對比了普通讀取、段讀取、流讀取三種方式,初始內(nèi)存占用 28M 左右:

·普通讀取后,內(nèi)存占用 100M 多

·段讀取后,內(nèi)存占用 60M 左右

·流讀取后,內(nèi)存占用 60M 左右

補充知識點

MySQL共享臨時表空間知識點

MySQL 5.7在 temporary tablespace上做了改進(jìn),已經(jīng)實現(xiàn)將 temporary tablespace 從 ibdata(共享表空間文件)中分離。并且可以重啟重置大小,避免出現(xiàn)像以前 ibdata 過大難以釋放的問題。
其參數(shù)為:innodb_temp_data_file_path

1.表現(xiàn)

MySQL啟動時 datadir 下會創(chuàng)建一個 ibtmp1 文件,初始大小為 12M,默認(rèn)值下會無限擴展:

通常來說,查詢導(dǎo)致的臨時表(如group by)如果超出 tmp_table_size、max_heap_table_size 大小限制則創(chuàng)建 innodb 磁盤臨時表(MySQL5.7默認(rèn)臨時表引擎為 innodb),存放在共享臨時表空間;

如果某個操作創(chuàng)建了一個大小為100 M的臨時表,則臨時表空間數(shù)據(jù)文件會擴展到 100M大小以滿足臨時表的需要。當(dāng)刪除臨時表時,釋放的空間可以重新用于新的臨時表,但 ibtmp1 文件保持?jǐn)U展大小。

2.查詢視圖

可查詢共享臨時表空間的使用情況:

SELECT FILE_NAME, TABLESPACE_NAME, ENGINE, INITIAL_SIZE, TOTAL_EXTENTS*EXTENT_SIZE AS TotalSizeBytes, DATA_FREE,MAXIMUM_SIZE FROM INFORMATION_SCHEMA.FILES WHERE TABLESPACE_NAME = 'innodb_temporary'/G*************************** 1. row ***************************    FILE_NAME: /data/mysql5722/data/ibtmp1TABLESPACE_NAME: innodb_temporary      ENGINE: InnoDB    INITIAL_SIZE: 12582912   TotalSizeBytes: 31457280    DATA_FREE: 27262976  MAXIMUM_SIZE: 314572801 row in set (0.00 sec)

3.回收方式

重啟 MySQL 才能回收

4.限制大小

為防止臨時數(shù)據(jù)文件變得過大,可以配置該 innodb_temp_data_file_path (需重啟生效)選項以指定最大文件大小,當(dāng)數(shù)據(jù)文件達(dá)到最大大小時,查詢將返回錯誤:

innodb_temp_data_file_path=ibtmp1:12M:autoextend:max:2G

5. 臨時表空間與 tmpdir 對比

共享臨時表空間用于存儲非壓縮InnoDB臨時表(non-compressed InnoDB temporary tables)、關(guān)系對象(related objects)、回滾段(rollback segment)等數(shù)據(jù);

tmpdir 用于存放指定臨時文件(temporary files)和臨時表(temporary tables),與共享臨時表空間不同的是,tmpdir存儲的是compressed InnoDB temporary tables。

可通過如下語句測試:

CREATE TEMPORARY TABLE compress_table (id int, name char(255)) ROW_FORMAT=COMPRESSED;CREATE TEMPORARY TABLE uncompress_table (id int, name char(255)) ;

附件

SimpleExample.java

import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Properties;import java.util.concurrent.CountDownLatch;import java.util.concurrent.atomic.AtomicLong;public class SimpleExample { public static void main(String[] args) throws Exception {  Class.forName("com.mysql.jdbc.Driver");  Properties props = new Properties();  props.setProperty("user", "root");  props.setProperty("password", "root");  SimpleExample engine = new SimpleExample();//  engine.execute(props,"jdbc:mysql://10.186.24.31:3336/hucq?useSSL=false");  engine.execute(props,"jdbc:mysql://10.186.24.31:3336/hucq?useSSL=false&useCursorFetch=true"); } final AtomicLong tmAl = new AtomicLong(); final String tableName="test"; public void execute(Properties props,String url) {  CountDownLatch cdl = new CountDownLatch(1);  long start = System.currentTimeMillis();  for (int i = 0; i < 1; i++) {   TestThread insertThread = new TestThread(props,cdl, url);   Thread t = new Thread(insertThread);   t.start();   System.out.println("Test start");  }  try {   cdl.await();   long end = System.currentTimeMillis();   System.out.println("Test end,total cost:" + (end-start) + "ms");  } catch (Exception e) {  } }  class TestThread implements Runnable {  Properties props;  private CountDownLatch countDownLatch;  String url;  public TestThread(Properties props,CountDownLatch cdl,String url) {   this.props = props;   this.countDownLatch = cdl;   this.url = url;  }  public void run() {   Connection connection = null;   PreparedStatement ps = null;   Statement st = null;   long start = System.currentTimeMillis();   try {    connection = DriverManager.getConnection(url,props);    connection.setAutoCommit(false);    st = connection.createStatement();         //st.setFetchSize(500);    st.setFetchSize(Integer.MIN_VALUE); //僅修改此處即可         ResultSet rstmp;         st.executeQuery("select sum(k) from sbtest1 group by k");    rstmp = st.getResultSet();    while(rstmp.next()){          }   } catch (Exception e) {    System.out.println(System.currentTimeMillis() - start);    System.out.println(new java.util.Date().toString());    e.printStackTrace();   } finally {    if (ps != null)     try {      ps.close();     } catch (SQLException e1) {      e1.printStackTrace();     }    if (connection != null)     try {      connection.close();     } catch (SQLException e1) {      e1.printStackTrace();     }    this.countDownLatch.countDown();   }  } }}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到MYSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
激情伊人五月天久久综合| 亚洲精选久久| 交换国产精品视频一区| 无码人妻精品一区二区三应用大全| 影音先锋男人资源在线观看| 在线视频福利一区| 韩国av中文字幕| 亚洲aaa在线观看| 日韩色视频在线观看| 先锋资源一区| 日本美女高清在线观看免费| 久久中文字幕在线| 黄网站在线观看永久免费| 精品视频网站| 51xx午夜影福利| 亚洲国产精一区二区三区性色| 欧美专区国产专区| 91在线精品视频| 国产精品亚洲一区二区无码| 日本一欧美一欧美一亚洲视频| 91xxxxx| 正在播放国产对白害羞| 国产成人精品国内自产拍免费看| 在线观看h片| 欧美一区二区高清| 天堂网www中文在线| 极品少妇xxxx精品少妇偷拍| 四虎成人欧美精品在永久在线| 日韩小视频在线| 国产精品欧美久久久久天天影视| www.国产精品一二区| 日韩成人黄色| 亚洲成人手机在线| 日韩电影免费网站| xxx欧美老熟| 国产一区免费| ...xxx性欧美| 91尤物视频在线观看| 欧美亚洲日本| 69av在线播放| 国产精品夜夜夜爽张柏芝| 中文字幕55页| 欧美va在线| 日韩激情av在线免费观看| 成人精品在线观看视频| 欧美大胆在线视频| 精品欧美一区免费观看α√| 婷婷亚洲一区二区三区| 懂色av影视一区二区三区| 四虎4545www国产精品| 精品国产一区二区精华| 久久网中文字幕| 欧美日韩国产精品一区二区| 久久久久久久久国产一区| 先锋资源男人站| 日韩一区二区免费视频| a级片免费观看| 日韩一区二区三区视频在线| 日韩视频免费看| 羞羞小视频视频| 美女视频网站久久| 国模私拍视频一区| 日韩高清一二三区| 成人中心免费视频| 日本二区视频| 欧美精品三级在线观看| 午夜一级久久| 性欧美lx╳lx╳| 欧美激情精品久久久久久小说| 久久久噜噜噜久久人人看| 欧美一级本道电影免费专区| 三级黄色网址| 亚洲国产精品久久久| 美女写真久久影院| 国产电影一区| 99综合精品| 亚洲精品国产美女| 色视频一区二区| 欧美喷潮久久久xxxxx| 国产精品福利导航| 成人毛片在线观看| 国产一国产二国产三| 久久国产香蕉视频| 午夜久久tv| 国产一区二区三区不卡免费观看| 成人高潮aa毛片免费| 成人在色线视频在线观看免费大全| 亚洲激情精品| 美女扒开腿让男人桶爽久久软| 国产精品美女久久久浪潮软件| 国产一级免费视频| 色婷婷激情综合| 国产剧情久久久久久| 你懂的视频网址| 欧美一区二区三区婷婷| 一区二区三区少妇| 中文字幕在线免费专区| 久久精品99国产国产精| 在线中文字幕-区二区三区四区| 北条麻妃99精品青青久久| 蜜桃av久久久亚洲精品| 精品日本高清在线播放| 最近中文字幕2019第二页视频| 爽爽免费视频| 自拍偷拍福利视频| 自拍偷拍第八页| 日本美女视频一区二区| 国产精品88久久久久久| 在线成人av电影| 无遮挡又色又刺激的女人视频| 91精品国产乱码久久久| 亚洲精品一区二区三区四区五区| 91精品国产乱码久久久竹菊| 91嫩草视频在线观看| 国产一级片大全| 亚洲影院中文字幕| 久久久高清视频| 国产精品88888| 久久久久久久电影一区| 成人午夜免费在线视频| sm捆绑调教视频| 西西午夜视频| 国产999在线| 精品欧美激情精品一区| 色妞在线综合亚洲欧美| 91视频在线看| 56国语精品自产拍在线观看| av资源种子在线观看| 精品亚洲aⅴ无码一区二区三区| 美女国产一区二区三区| 国内精品久久久久久久久蜜桃| 久久精品99国产| 亚洲婷婷综合网| www.8ⅹ8ⅹ羞羞漫画在线看| 亚洲成a人片在线不卡一二三区| 自拍偷自拍亚洲精品被多人伦好爽| 亚洲欧美精品一区二区三区| 国产三区在线观看| 久久精品亚洲精品国产欧美| 亚洲美女精品一区| 日韩中文一区| 一本久久综合亚洲鲁鲁五月天| 亚洲中无吗在线| 国产精品扒开腿做爽爽爽视频| 91青青草视频| 久久这里有精品15一区二区三区| 欧美成人精品h版在线观看| 欧美色精品天天在线观看视频| 日韩一区二区中文字幕| xfplay5566色资源网站| 韩国三级hd两男一女| 不卡av免费观看| 开心丁香婷婷深爱五月| 亚洲国产一成人久久精品| 精品国精品国产尤物美女| 在线观看免费黄色小视频| 亚洲大胆人体在线| 国产探花在线精品一区二区| 午夜婷婷在线观看| 日韩欧美一区二区在线视频| 国产精品免费aⅴ片在线观看| 99精品久久久久久| 91在线观看污| 欧美一区二区三区婷婷| 性感美女极品91精品| 国产91精品久久久久久久网曝门| 男男gay免费网站| 亚洲国产va精品久久久不卡综合| 欧美精品1区2区| 天天射成人网| 国产亚洲精品久久久久久移动网络| 日本老熟俱乐部h0930| 91福利社在线观看| 国产清纯美女被跳蛋高潮一区二区久久w| 黑人精品一区二区| 91精品福利在线| 亚欧无线一线二线三线区别| 97视频资源在线观看| 久久激情免费视频| 欧美日韩亚洲第一页| 偷拍视频一区二区三区| 精品人伦一区二区色婷婷| 日韩久久在线| 亚洲精品偷拍| 羞羞在线观看视频| 99精品国产一区二区青青牛奶| 国产极品久久久| 日本午夜精品视频在线观看| 神马久久精品综合| 日韩在线综合网| 色综合夜色一区| 日本三级久久久| 国产成人精品在线| 日韩福利片在线观看| 伊人久久大香线蕉av超碰| 亚洲精品天堂在线| 亚洲永久精品免费| 国产亚洲一区二区在线| 日本xxxx高清色视频| 91高清视频免费观看| 极品国产人妖chinesets亚洲人妖| 亚洲精品成av人片天堂无码| 国产主播在线资源| 中国一级特黄录像播放| 午夜国产视频| 精品在线免费观看| 日本午夜精品一区二区三区| 美女主播精品视频一二三四| 亚洲欧洲日韩在线| 欧美一区二区三区思思人| eeuss影院在线观看| www.日本久久久久com.| 午夜视频在线免费观看| 伊人伊人av电影| 国产欧美久久一区二区三区| 国产日韩欧美夫妻视频在线观看| 精品国产欧美| 精品视频国内| 中文字幕亚洲日本| 玖玖玖精品中文字幕| 亚洲成年人电影在线观看| 少妇毛片一区二区三区| 亚洲男女av一区二区| 免费看污污视频| 国产最新免费视频| 国产精品久久久精品四季影院| 久久精品亚洲a| 波多野结衣乳巨码无在线| 男人天堂午夜在线| 手机av在线不卡| 四虎成人欧美精品在永久在线| 69av在线播放| 国产一级免费在线观看| 成人高清在线视频| 日韩在线国产精品| 亚洲成a人v欧美综合天堂| 欧洲精品二区| а√天堂www在线а√天堂视频| 国产有码在线观看| 国产精品久久久久久久一区二区| 久久人人九九| 日本一二区视频| 欧美18av| 欧美一级性视频| 91av在线网站| 日韩av电影国产| 国产精品区在线观看| 日韩视频一区| 国产视频一二三区| 成人免费一区二区三区在线观看| 成人淫片免费视频95视频| 日本精品久久久久久久久久| 天堂av免费看| 婷婷精品国产一区二区三区日韩| 黄页网站免费在线观看| 婷婷社区五月天| 高清精品xnxxcom| 国产精品一区二区视频| 日本免费在线视频观看| 91传媒视频在线观看| 日本不卡一区二区三区在线观看| 久久综合久久美利坚合众国| 中文字幕被公侵犯的漂亮人妻| 国产精自产拍久久久久久| 91热视频在线观看| 久久男人天堂| 免费一级电影| 久久亚洲综合国产精品99麻豆精品福利| 黄色在线免费看| 日韩中文字幕免费在线观看| 欧美日韩精品中文字幕一区二区| 久久美女高清视频| 在线精品视频免费播放| 999精品视频在这里| 亚洲电影在线看| 性色av一区二区三区免费| 欧洲成人综合网| 国内精品久久久久影院薰衣草| 青娱乐免费在线视频| 亚洲av片不卡无码久久| 欧美日韩大片一区二区三区| 中文字幕av久久| 欧美日韩视频不卡| 国产日韩欧美在线播放| 岛国av免费在线观看| 国内精品400部情侣激情| 伊人国产在线观看| a级网站在线播放| 亚洲精品视频在线看| 免费看的黄网站| 色在线免费视频| 国产激情视频一区二区在线观看| 亚洲最大福利视频网站| 成人午夜电影在线观看| 亚洲爆乳无码精品aaa片蜜桃| avtt天堂资源网站| 亚洲精品第一区二区三区| 精品免费视频| 欧美日韩喷水| 日韩一区三区| 欧美激情第一页在线观看| 亚洲激情六月丁香| 91大神在线观看线路一区| 狠狠狠狠狠狠狠| 国产午夜在线一区二区三区| 一区二区三区四区不卡在线| 黄色一级视频在线播放| 女人黄色一级片| 国产精品一区二区在线| 国产精品yjizz| 成年人免费av| 狠狠入ady亚洲精品经典电影| 中文字幕在线日韩| 4438x全国最大成人| 又黄又湿又爽又免费又色| 成人精品高清在线视频| jizz蜜桃视频在线观看| 中文字幕天天干| 91久久精品国产91久久| 色是在线视频| 亚洲一区二区精品视频| 精品精品国产高清a毛片牛牛| 日韩国产欧美一区| 思思99re6国产在线播放| 在线一区日本视频| 精品国产精品三级精品av网址| 女同另类激情重口| 五月天婷婷丁香网|