mysql從庫應用負載_線上MySQL數據庫高負載的解決思路--再次論程序應用索引的重要性...

前言:過去的筆記整理而得,未免丟失,發布個人博客。[2012年的資料筆記]

場景:數據庫的負載飆升,CPU高達99%。

查看進程。通過猜測推理,定位了一些select語句

363478427 | apps_read ? ? | 192.168.1.113:48945 | apps ? ? ? | Query ? ? ? | ? ? ? 1 | Sending data ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | select * from category_doc_info

where (doc_title = '???') ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|

| 363478430 | apps_read ? ? | 192.168.1.113:48948 | apps ? ? ? | Query ? ? ? | ? ? ? 1 | Sending data ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | select * from category_doc_info

where (doc_title = '??????') ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

| 363478434 | apps_read ? ? | 192.168.1.113:48952 | apps ? ? ? | Query ? ? ? | ? ? ? 1 | Sending data ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | select * from category_doc_info

where (doc_title = '?????????') ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|

| 363478437 | apps_read ? ? | 192.168.1.113:48955 | apps ? ? ? | Query ? ? ? | ? ? ? 1 | Sending data ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | select * from category_doc_info

where (doc_title = '????????') ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

| 363478462 | apps_read ? ? | 192.168.1.113:48957 | apps ? ? ? | Query ? ? ? | ? ? ? 1 | Sending data ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | select * from category_doc_info

where (doc_title = '???????') ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|

| 363478500 | apps_read ? ? | 192.168.1.113:48960 | apps ? ? ? | Query ? ? ? | ? ? ? 1 | Sending data ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | select * from category_doc_info

where (doc_title = '????') ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

| 363478511 | apps_read ? ? | 192.168.1.113:48963 | apps ? ? ? | Query ? ? ? | ? ? ? 0 | Sending data ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | select * from category_doc_info

where (doc_title = '??????') ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

| 363478518 | apps_read ? ? | 192.168.1.113:48964 | apps ? ? ? | Query ? ? ? | ? ? ? 1 | Sending data ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | select * from category_doc_info

where (doc_title = 'T2??') ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

| 363478535 | apps_read ? ? | 192.168.1.113:48965 | apps ? ? ? | Query ? ? ? | ? ? ? 0 | Sending data ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | select * from category_doc_info

where (doc_title = '???') ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|

| 363478540 | apps_read ? ? | 192.168.1.113:48968 | apps ? ? ? | Query ? ? ? | ? ? ? 1 | Sending data ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | select * from category_doc_info

where (doc_title = '??') ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

| 363478613 | apps_read ? ? | 192.168.1.113:48971 | apps ? ? ? | Query ? ? ? | ? ? ? 0 | Sending data ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | select * from category_doc_info

where (doc_title = '???') ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|

| 363478630 | apps_read ? ? | 192.168.1.113:48975 | apps ? ? ? | Query ? ? ? | ? ? ? 0 | Sending data ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | select *

查看此表的數據庫表結構如下:

---------------------------------------------------------------------------------------------------------------------------------------------------------

| category_doc_info | CREATE TABLE `category_doc_info` (

`id` int(10) unsigned NOT NULL auto_increment,

`category_id` int(10) unsigned NOT NULL COMMENT

`doc_title` varchar(255) NOT NULL COMMENT

`category_show` tinyint(1) unsigned NOT NULL COMMENT

`category_Coordinate` tinyint(1) unsigned NOT NULL default '2'

`category_order` tinyint(1) unsigned NOT NULL default '0'

PRIMARY KEY ?(`id`),

UNIQUE KEY `INDEX_SEARCH` (`category_id`,`doc_title`),

) ENGINE=InnoDB AUTO_INCREMENT=343502 DEFAULT CHARSET=utf8 |

---------------------------------------------------------------------------------------------------------------------------------------------------------

發現只有一個組合索引。但是完全沒有用到。

現實場景:都是where (doc_title = '???') ?的語句

查看具體的一條SQL語句的執行計劃,如下:

mysql> explain ?select * from category_doc_info where (doc_title = '獨出新裁');

+----+-------------+-------------------+------+---------------+------+---------+------+--------+-------------+

| id | select_type | table ? ? ? ? ? ? | type | possible_keys | key ?| key_len | ref ?| rows ? | Extra ? ? ? |

+----+-------------+-------------------+------+---------------+------+---------+------+--------+-------------+

| ?1 | SIMPLE ? ? ?| category_doc_info | ALL ?| NULL ? ? ? ? ?| NULL | NULL ? ?| NULL |?232717| Using where |

+----+-------------+-------------------+------+---------------+------+---------+------+--------+-------------+

可以發現都是全表查詢,并且是高并發的訪問上述語句。

經過分析,修改生產環境的表結構,如下:

| category_doc_info | CREATE TABLE `category_doc_info` (

`id` int(10) unsigned NOT NULL auto_increment,

`category_id` int(10) unsigned NOT NULL,

`doc_title` varchar(255) NOT NULL',

`category_show` tinyint(1) unsigned NOT NULL,

`category_Coordinate` tinyint(1) unsigned NOT NULL default '2',

`category_order` tinyint(1) unsigned NOT NULL default '0',

PRIMARY KEY ?(`id`),

UNIQUE KEY `INDEX_SEARCH` (`category_id`,`doc_title`),

KEY `idx_category_title` (`doc_title`) ? ? ? ? ? ? ? ? ? ? ? ? ? ?//新添加的表索引

) ENGINE=InnoDB AUTO_INCREMENT=343502 DEFAULT CHARSET=utf8 |

讓上述的程序應用走索引,數據庫的負載恢復正常,性能恢復正常。

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

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

相關文章

python獲取方法的裝飾方法_python中的方法和裝飾器

[TOC]裝飾器python中的裝飾器(decorator)是在pep 318中被首次引入,它的本質是一個函數這個函數是接受其它參數為參數,并且用一個新的,修改后的函數作為替換,最常見的裝飾器就classmethod和staticmethoddef happy(f):return lambda…

一幫一python_[python]L1-030?一幫一?(15分)

L1-030 一幫一 (15分)“一幫一學習小組”是中小學中常見的學習組織方式,老師把學習成績靠前的學生跟學習成績靠后的學生排在一組。本題就請你編寫程序幫助老師自動完成這個分配工作,即在得到全班學生的排名后,在當前尚未分組的學生中&#xf…

java書面_Java程序猿的書面采訪String3

public class SameString {//思想二:每個字符都相應著自己的ASC碼,第一個思想的算法復雜度為O(nlogn)。一般能夠利用空間來減少時間復雜度//能夠開辟一個大小為256的數組空間,而且將256個數組元素都置為0,然后遍歷第一個字符串把字…

java fangfa_daicanfangfa java中的方法 剛入門的分不清帶參方法的作用和用處 這個可以詳細的講解如何使用帶參方法 - 下載 - 搜珍網...

第14章 帶參數的方法/01 教學演示示例/示例1:帶一個參數的方法/StudentsBiz.java第14章 帶參數的方法/01 教學演示示例/示例1:帶一個參數的方法/TestAdd.java第14章 帶參數的方法/01 教學演示示例/示例2:帶多個參數的方法/StudentsBiz.java第…

java sqlite 工具類_Java 工具類 - JDBC通用操作基類 BaseDao

封裝了增刪改查功能適用于MySQL、Oracle、SQLServer、DB2、Sybase、JTDS、PostgreSql、SQLite、Derby、H2、HSQLDB、ODBC 等等數據庫,有需要的還可以自己增加。package com.tgb.hz.jdbc;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import javax.namin…

java 跨域 下載文件_文件下載重命名(可跨域)

一、正常情況下,我們都如此下載文件并修改文件名,在a標簽上面添加download屬性var link document.createElement(a);link.href file.url;link.download file.name;link.target"_blank";link.click();由于a.download跨域會失效,上…

java hibernate 插入數據_[Java教程]hibernate 返回新插入數據的Id

[Java教程]hibernate 返回新插入數據的Id0 2015-08-28 10:00:11例如 表明 studentInfoString sql"set set nocount on studentInfo(列名,列名) values(值,值);select identity as inserId";java代碼:public int executeCount(String sql, Map paramMap) {…

java輸入行數打印菱形_JAVA題,輸入行數,輸入列數,輸出一個菱形

展開全部1,冒泡排序1. /**2. * JAVA排序算法實現代碼-冒泡(Bubble Sort)排序。3. *4. *5. *6. */7. public class Test {8. public static void main(String[] args) {9. int[] a ;10.11. System.out.print("排序前: ");12.13. for (int i 0; i < a.length; i)1…

mysql 密碼大小寫_MySQL數據庫加密和解密~認證登陸密碼(mysql.user)和MySQL不區分大小寫...

MySQL數據庫認證密碼有兩種方式:1&#xff1a;MySQL 4.1版本之前是MySQL323加密2&#xff1a;MySQL 4.1和之后的版本都是MySQLSHA1加密還有函數:AES_ENCRYPT()加密函數和AES_DECRYPT()解密函數和MD5()加密。MySQL數據庫中自帶old_password(str)和password(str)函數,前者是MySQL…

三星手機 java_如何在三星手機上安裝Java ME應用程序?

我的手機應該可以運行&#xff1a;JavaTM&#xff1a;MIDP 2.0,基于CLDC 1.1的應用程序.但是,無論我嘗試在其上安裝哪個應用程序,我都會收到錯誤&#xff1a;已下載的JAR無效我已經嘗試在Netbeans上構建Java ME項目,使用指定的MIDP 2.0和CLDC 1.1.這些應用程序很簡單,使用Netbe…

openshift 3 mysql_最新OpenShift免費空間申請與使用教程-1G內存1G空間支持PHP和MysqL

一、OpenShift空間申請使用前必備工具1、OpenShift官網&#xff1a;1、官方網站&#xff1a;https://www.openshift.com/2、OpenShift V3&#xff1a;https://manage.openshift.com/2、Github賬號(或者其他的git倉庫也可以..)。注冊git倉庫是為了方便的實現代碼的同步&#xff…

python 簡單web音頻_Python Twisted web服務器音頻fi

我嘗試用python中的twisted創建一個簡單的web服務器。不過&#xff0c;我無法提供m4a音頻文件。在在當前程序中&#xff0c;當我加載http://localhost:8880/mp3.html時&#xff0c;它可以正常工作。它顯示音頻播放器和mp3播放。此外&#xff0c;程序同時打印“/mp3.html”和/測…

cpython教程_python高性能擴展工具-cython教程1快速入門

Cython不僅僅是一種編程語言。它的起源可以追溯到SAGE數學軟件包&#xff0c;它用于提高數學計算性能&#xff0c;例如涉及矩陣的計算。更一般地說&#xff0c;我傾向于將Cython視為SWIG的替代品&#xff0c;為本機代碼生成非常好的Python綁定。SWIG是最早和最好之一&#xff0…

golang mysql封裝_golang如何封裝路由

封裝方式一、路由寫在 main函數中&#xff0c;數據庫初始連接放在 init() 函數中。、首先看 main.go一個初始化函數&#xff0c;初始化 dbfunc init() {db.Connect()}第二&#xff0c;路由func main() {// Configurerouter : gin.Default()// Set html render optionshtmlRende…

在java繼承機制中 父類中的私有_Java中子類能繼承父類的私有屬性嗎?

前段時間去聽老師講課的時候&#xff0c;老師告訴我子類是可以繼承父類所有的屬性和方法的。當時我是極其疑惑的&#xff0c;因為之前學校考試時這個考點我記得很清楚&#xff1a;子類只能繼承父類的非私有屬性和方法。老師給我的解釋是這樣的——先看下面一段代碼/*** 定義父類…

堆棧關系java_從關鍵字說Java對象、引用、指針、堆棧的關系

前言&#xff1a;上一篇中我們介紹了new關鍵字 點擊打開鏈接&#xff0c;new一個類&#xff0c;實際上就是調用該類的構造函數&#xff0c;返回該類的對象。如a new Animal();返回的對象賦給變量a。我們來分析一下內存分配的步驟&#xff0c;new一個類&#xff0c;實際上就創造…

java socket編程客戶端_Java Socket編程 - 基于Socket實現HTTP下載客戶端

沒有借助任何第三方庫&#xff0c;完全基于JAVA Socket實現一個最小化的HTTP文件下載客戶端。完整的演示如何通過Socket實現下載文件的HTTP請求(request header)發送如何從Socket中接受HTTP響應(Response header, Response body)報文并解析與保存文件內容。如何通過SwingWork實…

java讀c二進制文件_如何使用JAVA讀取C / Matlab創建的二進制文件

小編典典正如我所猜測的那樣&#xff0c;這是一個字節序問題&#xff0c;即您的二進制文件被寫為低字節序的整數(可能是因為您使用的是Intel或類似的CPU)。但是&#xff0c;無論Java代碼運行在哪個CPU上&#xff0c;它都在讀取大端整數。為了顯示該問題&#xff0c;以下代碼將讀…

java 通聯支付接口_allinpay 通聯支付接口實例

【實例簡介】allinpay 支付的實例代碼&#xff0c;這只是部分&#xff0c;需要其它的請聯系我。 幫忙找【實例截圖】【核心代碼】201708081652114811└── unionorder_demo├── java│ └── uniondemo│ ├── WebContent│ │ ├── META-INF│ │ │ └…

java web tcp長連接超時時間_常用java web容器http長連接超時設置

1.http長連接相關知識http長連接對我們來說并不陌生&#xff0c;但長連接并不是永遠不會關閉。對于HTTP長連接需要注意下面幾點&#xff1a;keepalive_timeout指的是web服務器發送完最后一個響應報文后&#xff0c;開始計時&#xff0c;如果在keepalive_timeout指定的時間內還沒…