mysql一直copying to tmp table_mysql提示Copying to tmp table on disk

網站運行的慢了,查找原因是Copying to tmp table on disk那怎么解決這個問題呢

解決一例最近常常碰到網站慢的情況,登陸到后臺,查詢一下 /opt/mysql/bin/mysqladmin processlist;

發現一個查詢狀態為: Copying to tmp table 而且此查詢速度非常慢,基本一分鐘左右才出來,后面是很多查詢,狀態為lock。

此分析對我沒有太大的作用,因此用google查詢了一下,發現網上一篇文章講得很好: Copying to tmp table on disk The temporary result set was larger than tmp_table_size and the thread is now changing the in memory-based temporary table to a disk based one to save memory.

哦,原來是這樣的,如果查詢超出了tmp_table_size的限制,那么mysql用/tmp保存查詢結果,然后返回給客戶端。

set global tmp_table_size=209715200 (200M) 再次運行此查詢,用/opt/mysql/bin/mysqladmin processlist;

進行觀察,發現不會出現上述問題.

至此問題解決. 調節tmp_table_size 的時候發現另外一些參數

Qcache_queries_in_cache 在緩存中已注冊的查詢數目

Qcache_inserts 被加入到緩存中的查詢數目

Qcache_hits 緩存采樣數數目

Qcache_lowmem_prunes 因為缺少內存而被從緩存中刪除的查詢數目

Qcache_not_cached 沒有被緩存的查詢數目 (不能被緩存的,或由于 QUERY_CACHE_TYPE)

Qcache_free_memory 查詢緩存的空閑內存總數

Qcache_free_blocks 查詢緩存中的空閑內存塊的數目

Qcache_total_blocks 查詢緩存中的塊的總數目

Qcache_free_memory 可以緩存一些常用的查詢,如果是常用的sql會被裝載到內存。那樣會增加數據庫訪問速度

在做mysql性能優化時,發現copying to tmp table on disk占用了很長的執行時間,如下性能分析圖:

57ff92bbd101c1607da0ef2ae8b25f2e.png

上圖中的第一行顯示mysql向臨時表復制數據花費了117毫秒的時間,這個必須想辦法優化掉。

經過查資料發現mysql可以通過變量tmp_table_size和max_heap_table_size來控制內存表大小上限,如果超過上限會將數據寫到磁盤上,從而會有物理磁盤的讀寫操作,導致影響性能。

我們可以通過調整這兩個變量的值來提升性能(當然前提條件是mysql所在服務器有足夠的內存)。

首先可以通過下面語句查看當前的變量值:

SHOW VARIABLES LIKE'max_heap_table_size%';

然后通過SET GLOBAL max_heap_table_size=522715200;?設置變量值為512M,你可以根據自己的情況設置合適的值;tmp_table_size變量的設置方法一樣。

在使用mysql是提醒mysql Copying to tmp table on disk 錯誤了,下面我們來看看此問題的解決辦法.

經過查資料發現mysql可以通過變量tmp_table_size和max_heap_table_size來控制內存表大小上限,如果超過上限會將數據寫到磁盤上,從而會有物理磁盤的讀寫操作,導致影響性能.

我們可以通過調整這兩個變量的值來提升性能,當然前提條件是mysql所在服務器有足夠的內存.

首先可以通過下面語句查看當前的變量值:

SHOW VARIABLES LIKE ‘max_heap_table_size%’;

然后通過SET GLOBAL max_heap_table_size=522715200; 設置變量值為512M,你可以根據自己的情況設置合適的值,tmp_table_size變量的設置方法一樣.

SHOW VARIABLES LIKE ‘tmp_table_size’;

SET GLOBAL max_heap_table_size=512*1024*1024;

其次發現開發人員編寫的語句,根本無法使用到緩存,這個sql優化是個長期的過程,代碼如下:

#?Time:?140901?16:26:23

#?User@Host:?wealth[wealth]?@?[172.20.1.70]

#?Query_time:?2266.887211?Lock_time:?0.000196?Rows_sent:?17?Rows_examined:?71501657

SET?timestamp=1409559983;

SELECT?a.Pid,count(a.id)ascount,p.ProductId,p.ProductName,p.ProductType,p.Profit,p.StartTime,p.EndTime,p.StartMoney,p.AddTime,i.IssuerName?FROM?`Issuer`asi,`Count`asa?left?join?Productasp?on?a.Pid=p.ProductId?WHERE?a.Stime?>?‘time()?–?3600*24*30′andp.IssuerId=i.IssuerId?AND?p.IsDel=0?group?by?a.Pid?order?bycount(a.id)?desc?limit?0,17;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/530326.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530326.shtml
英文地址,請注明出處:http://en.pswp.cn/news/530326.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

idea cloud bootstrap是啥_application.yml與bootstrap.yml的區別

Spring Boot 默認支持 properties(.properties) 和 YAML(.yml .yaml ) 兩種格式的配置文件,yml 和 properties 文件都屬于配置文件,功能一樣。Spring Cloud 構建于 Spring Boot 之上,在 Spring Boot 中有兩種上下文,一種是 bootst…

python讀取日期_從文件中讀取日期和數據(Python)

我想從文件中讀取時間字符串和數據,但是當我使用loadtxt時,我不能同時讀取字符串和數字,因為字符串不是浮點型的。所以我嘗試使用genfromtxt并使用delimiter[][][]作為我所擁有的列,但是字符串的讀起來像nan。我希望像時間數組(da…

一個小白如何創建MYSQL數據表_MySQL小白掃盲(二)--建表、添加、查詢

1.SELECT子句字句名稱          使用目的select           確定結果集中應該包含哪些列from           指明所要提取數據的表,以及這些表示如何連接的where           過濾掉不需要的數據group by         用于…

元數據解決分表不可 mysql_MySQL InnoDB技術內幕:內存管理、事務和鎖

前面有多篇文章介紹過MySQL InnoDB的相關知識,今天我們要更深入一些,看看它們的內部原理和機制是如何實現的。一、內存管理我們知道,MySQl是一個存儲系統,數據最后都寫在磁盤上。我們以前也提到過,磁盤的速度特別是大容…

navicat for mysql 13_Navicat for MySQL下載

Navicat for MySQL 是一套管理和開發 MySQL 或 MariaDB 的理想解決方案。它使你以單一程序同時連接到 MySQL 和 MariaDB。這個功能齊備的前端軟件為數據庫管理、開發和維護提供了直觀而強大的圖形界面。它提供了一組全面的工具給 MySQL 或MariaDB 新手,同時給專業人…

mysql 日期型中文報錯_mysql日期類型默認值'0000-00-00' 報錯,是什么問題?

如題,本來是 從另一個數據庫中導出的sql文件,在我電腦上導入報這個錯誤,不知道是不是mysql 版本問題。多方搜索無果,所以上來求助。DROP TABLE IF EXISTS workreport_member;CREATE TABLE workreport_member (uid int(10) unsigne…

python在線作業_南開大學20春學期《Python編程基礎》在線作業參考答案

南開大學20春學期(1709、1803、1809、1903、1909、2003)《Python編程基礎》在線作業試卷總分:100 得分:98一、單選題(共20 道試題,共40 分)1.已知“stra\rb\r\nc\n”,則“str.splitlines()”的返回結果是( )。A.[a,b,c]B.[a\r,b\r\n,c\n]C.[a\r,b\r,c]D.[a\r,b,c]答案:A2.已知“…

spring兼容mysql_springboot 最新版本支持 mysql6.0.6嗎

縹緲止盈1.首先在pom文件中加入下列依賴,一個使用jpa所需依賴,一個連接MySQL使用的依賴:mysqlmysql-connector-javaorg.springframework.bootspring-boot-starter-data-jpa 123456789102.在配置文件中添加datasource配置和jpa配置,在mysql中已經提前創建了一個名為db_test的數據…

java集合map_JAVA中的集合類Map、Set、List

*精煉的總結:Collection 是對象集合, Collection 有兩個子接口 List 和 SetList 可以通過下標 (1,2..) 來取得值,值可以重復而 Set 只能通過游標來取值,并且值是不能重復的ArrayList , Vector , LinkedList…

java虛擬機內存監控_java虛擬機內存監控工具jps,jinfo,Jstack,jstat,jmap,jhat使用...

將會打印出很多jvm運行時參數信息,由于比較長這里不再打印出來,可以自己試試,內容一目了然Jstack(Stack Trace for Java):JVM堆棧跟蹤工具jstack用于打印出給定的java進程ID或core file或遠程調試服務的Java堆棧信息,如…

idea 調試java技巧_IDEA 調試Java代碼的兩個技巧

本文介紹兩個使用IDEA 調試Java代碼的兩個技巧:修改變量值使用RuntimeException終止代碼執行修改變量值在Java代碼調試過程中,我們可以修改變量值,使其達到走指定分支的目的,或者使其滿足某個條件。我們以給變量beanName賦值為例&…

java 10進制轉 000x_java 如何把 00 轉換成 0x00 或者 10 轉換成 0x10

public static void main(String[] args) {String s "00000018A0010098C68E00989A690000000000BC614E000055AA55AA";System.out.println(s);byte[] b HexString2Bytes(s);System.out.println(Bytes2HexString(b));}/*** 將指定byte數組以16進制的形式打印到控制臺*…

java免檢異常_java-異常

java提供了異常處理機制:程序運行受阻時候的處理方式。1、異常分類Error:系統錯誤,由java虛擬機拋出,很少發生;免檢異常RuntimeException:程序設計錯誤,通常由java虛擬機拋出;免檢異…

java編程需要數學知識嗎_初學Java編程,需要英語和數學基礎嗎?

原標題:初學Java編程,需要英語和數學基礎嗎?“學習Java編程英語和數學是必備條件嗎?”很多Java零基礎學習或者轉型IT行業的都會有這樣的疑問,其實剛開始學習Java編程是不需要太高深的數學和英語基礎的。剛開始學習Java…

java map put報錯_java 集合(Map)

-------------------|Map 儲存的數據都是以鍵值對的形式,鍵不可重復,值可重復。----------------------------| HashMap----------------------------| TreeMap----------------------------| HashTableMap接口的方法:添加:put(K…

java簡單數據結構_圖解Java常用數據結構

最近在整理數據結構方面的知識, 系統化看了下 Java 中常用數據結構, 突發奇想用動畫來繪制數據流轉過程.主要基于 jdk8, 可能會有些特性與 jdk7 之前不相同, 例如 LinkedList LinkedHashMap 中的雙向列表不再是回環的.HashMap 中的單鏈表是尾插, 而不是頭插入等等, 后文不再贅敘…

jest java_?使用jest進行測試驅動開發

前言本文將使用jest進行測試驅動開發的示例,源碼在github。重點說明在開發中引入單元測試后開發過程,以及測試先行的開發思路。本文的重點是過程以及思維方法,框架以及用法不是重點。本文使用的編程語言是javascript,思路對其他語…

mysql sqlstate 08001_關于Toad連接DB2的sqlstate=08001錯誤

新裝的centos6.3db29.7,數據庫導入完了的之后用Toad連接訪問之的時候出錯了。DB2 Database Error: ERROR [08001] [IBM] SQL30081N A communication error has been detected. Communication protocol being used: "TCP/IP". Communication API being use…

mysql 設置主鍵命令_MySQL常用命令

1、修改MySQL密碼方法一:use mysql;update user set passwordPASSWORD(“123456”) where user‘root’;flush privileges;忘記密碼:sed -ri 3d skip-grant-tables /etc/my.cnfsystemctl restart mariadbuse mysql&…

python 整除的數組_計算和可被整除的所有子數組

在我學習面試的時候,我在GeeksForGeeks上找到了這個問題和解決方案,但不明白答案。在上面說的是Let there be a subarray (i, j) whose sum is divisible by ksum(i, j) sum(0, j) - sum(0, i-1)Sum for any subarray can be written as q*k rem where…