主頁 > 資料庫 > MySQL 主從延遲的常見原因及解決方法

MySQL 主從延遲的常見原因及解決方法

2023-04-19 09:41:44 資料庫

承蒙大家的支持,剛上市的《MySQL實戰》已經躍居京東自營資料庫圖書熱賣榜第 1 名,收到的反饋也普遍不錯,對該書感興趣的童鞋可通過右邊的鏈接購買,目前,京東自營有活動,只需 5 折,

主從延遲作為 MySQL 的痛點已經存在很多年了,以至于大家都有一種錯覺:有 MySQL 復制的地方就有主從延遲,

對于主從延遲的原因,很多人將之歸結為從庫的單執行緒重放,

但實際上,這個說法比較片面,因為很多場景,并行復制方案也解決不了,譬如從庫 SQL 執行緒被阻塞了,從庫磁盤 IO 存在瓶頸等,

很多童鞋在分析此類問題時缺乏一個系統的方法論,以致無法準確地定位出主從延遲的根本原因,

下面就如何分析主從延遲做一個系統、全面的總結,

本文主要包括以下兩方面的內容,

  1. 如何分析主從延遲,
  2. 主從延遲的常見原因及解決方法,

下一篇文章會介紹如何監控主從延遲,包括如何解讀 Seconds_Behind_Master、Seconds_Behind_Master 的局限性、pt-heartbeat 及 MySQL 8.0 原生的解決方案,敬請留意,

如何分析主從延遲

分析主從延遲一般會采集以下三類資訊,

從庫服務器的負載情況

為什么要首先查看服務器的負載情況呢?因為軟體層面的所有操作都需要系統資源來支撐,

常見的系統資源有四類:CPU、記憶體、IO、網路,對于主從延遲,一般會重點關注 CPU 和 IO ,

分析 CPU 是否達到瓶頸,常用的命令是 top,通過 top 我們可以直觀地看到主機的 CPU 使用情況,以下是 top 中 CPU 相關的輸出,

Cpu(s):  0.2%us,  0.2%sy,  0.0%ni, 99.5%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st

下面我們看看各個指標的具體含義,

  • us:處理用戶態( user )任務的 CPU 時間占比,

  • sy:處理內核態( system )任務的 CPU 時間占比,

  • ni:處理低優先級行程用戶態任務的 CPU 時間占比,

    行程的優先級由 nice 值決定,nine 的范圍是 -20 ~ 19 ,值越大,優先級越低,其中,1 ~ 19 稱之為低優先級,

  • id:處于空閑狀態( idle )的 CPU 時間占比,

  • wa:等待 IO 的 CPU 時間占比,

  • hi:處理硬中斷( irq )的 CPU 時間占比,

  • si:處理軟中斷( softirq )的 CPU 使用率,

  • st:當系統運行在虛擬機中的時候,被其它虛擬機占用( steal )的 CPU 時間占比,

一般來說,當 CPU 使用率 ( 1 - 處于空閑狀態的 CPU 時間占比 )超過 90% 時,需引起足夠關注,畢竟,對于資料庫應用來說,CPU 很少是瓶頸,除非有大量的慢 SQL ,

接下來看看 IO,

查看磁盤 IO 負載情況,常用的命令是 iostat ,

# iostat -xm 1
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           4.21    0.00    1.77    0.35    0.00   93.67

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
sdb               0.00     0.00  841.00 3234.00    13.14    38.96    26.19     0.60    0.15    0.30    0.11   0.08  32.60

命令中指定了 3 個選項,其中,

  • -x:列印擴展資訊,

  • -m:指定吞吐量的單位是 MB/s ,默認是 KB/s ,

  • 1:每隔 1s 列印一次,

下面看看輸出中各指標的具體含義,

  • rrqm/s:每秒被合并的讀請求的數量,

  • wrqm/s:每秒被合并的寫請求的數量,

  • r/s:每秒發送給磁盤的讀請求的數量,

  • w/s:每秒寫入磁盤的寫請求的數量,注意,這里的請求是合并后的請求,r/s + w/s 等于 IOPS ,

  • rMB/s:每秒從磁盤讀取的資料量,

  • wMB/s:每秒寫入磁盤的資料量,rMB/s + wMB/s 等于吞吐量,

  • avgrq-sz:I/O 請求的平均大小,單位是扇區,扇區的大小是 512 位元組,一般而言,I/O 請求越大,耗時越長,

  • avgqu-sz:佇列里的平均 I/O 請求數量,

  • await:I/O 請求的平均耗時,包括磁盤的實際處理時間及佇列中的等待時間,單位 ms ,

    其中,r_await   是讀請求的平均耗時,w_await 是寫請求的平均耗時,

  • svctm:I/O 請求的平均服務時間,單位 ms ,注意,這個指標已棄用,在后續版本會移除,

  • %util:磁盤飽和度,反映了一個采樣周期內,有多少時間在做 I/O 操作,

一般來說,我們會重點關注 await 和 %util,

對于只能串行處理 I/O 請求的設備來說,%util 接近 100% ,就意味著設備飽和,但對于 RAID、SSD 等設備,因為它能并行處理,故該值參考意義不大,即使達到了 100% ,也不意味著設備出現了飽和,至于是否達到了性能上限,需參考性能壓測下的 IOPS 和吞吐量,

主從復制狀態

對于主庫,執行 SHOW MASTER STATUS ,

mysql> show master status;
+------------------+----------+--------------+------------------+---------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                           |
+------------------+----------+--------------+------------------+---------------------------------------------+
| mysql-bin.000004 |  1631495 |              |                  | bd6b3216-04d6-11ec-b76f-000c292c1f7b:1-5588 |
+------------------+----------+--------------+------------------+---------------------------------------------+
1 row in set (0.00 sec)

SHOW MASTER STATUS 的輸出中重點關注 File 和 Position 這兩個指標的值,

對于從庫,執行 SHOW SLAVE STATUS ,

mysql> show slave status\G
*************************** 1. row ***************************
              ...
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 1631495
          ...
        Relay_Master_Log_File: mysql-bin.000004
          ...
          Exec_Master_Log_Pos: 1631495
          ...

SHOW SLAVE STATUS 的輸出中重點關注 Master_Log_File,Read_Master_Log_Pos,Relay_Master_Log_File,Exec_Master_Log_Pos 這四個指標的值,

接下來,重點比較以下兩對值,

第一對:( File , Position )  &  ( Master_Log_File , Read_Master_Log_Pos )

這里面,

  • ( File , Position ) 記錄了主庫 binlog 的位置,
  • ( Master_Log_File , Read_Master_Log_Pos ) 記錄了 IO 執行緒當前正在接收的二進制日志事件在主庫 binlog 中的位置,

如果 ( File , Position ) 大于 ( Master_Log_File , Read_Master_Log_Pos ) ,則意味著 IO 執行緒存在延遲,

第二對:( Master_Log_File , Read_Master_Log_Pos ) & ( Relay_Master_Log_File , Exec_Master_Log_Pos )

這里面,( Relay_Master_Log_File, Exec_Master_Log_Pos ) 記錄了 SQL 執行緒當前正在重放的二進制日志事件在主庫 binlog 的位置,

如果 ( Relay_Master_Log_File, Exec_Master_Log_Pos ) <  ( Master_Log_File, Read_Master_Log_Pos ) ,則意味著 SQL 執行緒存在延遲,

主庫 binlog 的寫入量

主要是看主庫 binlog 的生成速度,比如多少分鐘生成一個,

主從延遲的常見原因及解決方法

下面分別從 IO 執行緒和 SQL 執行緒這兩個方面展開介紹,

IO 執行緒存在延遲

下面看看 IO 執行緒出現延遲的常見原因及解決方法,

  1. 網路延遲,

    判斷是否為網路帶寬限制,如果是,可開啟 slave_compressed_protocol 引數,啟用 binlog 的壓縮傳輸,或者從 MySQL 8.0.20 開始,通過 binlog_transaction_compression 引數開啟 binlog 事務壓縮,

  2. 磁盤 IO 存在瓶頸 ,

    可調整從庫的雙一設定或關閉 binlog,

    注意,在 MySQL 5.6 中,如果開啟了 GTID ,則會強制要求開啟 binlog ,MySQL 5.7 無此限制,

  3. 網卡存在問題,

    這種情況不多見,但確實碰到過,當時是一主兩從的架構,發現一臺主機上的所有從庫都延遲了,但這些從庫對應集群的其它從庫卻沒有延遲,后來通過 scp 遠程拷貝檔案進一步確認了該臺主機的網路存在問題,最后經系統組確認,網卡存在問題,

一般情況下,IO 執行緒很少存在延遲,

SQL 執行緒存在延遲

下面看看 SQL 執行緒出現延遲的常見原因及解決方法,

主庫寫入量過大,SQL 執行緒單執行緒重放

具體體現如下:

  1. 從庫磁盤 IO 無明顯瓶頸,
  2. Relay_Master_Log_File , Exec_Master_Log_Pos 也在不斷變化,
  3. 主庫寫入量過大,如果磁盤使用的是 SATA SSD,當 binlog 的生成速度快于 5 分鐘一個時,從庫重放就會有瓶頸,

這個是 MySQL 軟體層面的硬傷,要解決該問題,可開啟 MySQL 5.7 引入的基于 LOGICAL_CLOCK 的并行復制,

關于 MySQL 并行復制方案,可參考:MySQL 并行復制方案演進歷史及原理分析

STATEMENT 格式下的慢 SQL

具體體現,在一段時間內 Relay_Master_Log_File , Exec_Master_Log_Pos 沒有變化,

看下面這個示例,對 1 張千萬資料的表進行 DELETE 操作,表上沒有任何索引,在主庫上執行用了 7.52s,觀察從庫的 Seconds_Behind_Master,發現它最大達到了 7s ,

mysql> show variables like 'binlog_format';
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
1 row in set (0.00 sec)

mysql> select count(*) from sbtest.sbtest1;
+----------+
| count(*) |
+----------+
| 10000000 |
+----------+
1 row in set (1.41 sec)

mysql> show create table sbtest.sbtest1\G
*************************** 1. row ***************************
       Table: sbtest1
Create Table: CREATE TABLE `sbtest1` (
  `id` int NOT NULL,
  `k` int NOT NULL DEFAULT '0',
  `c` char(120) NOT NULL DEFAULT '',
  `pad` char(60) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

mysql> delete from sbtest.sbtest1 where id <= 100;
Query OK, 100 rows affected (7.52 sec)

對于這種執行較慢的 SQL ,并行復制實際上也是無能為力的, 此時只能優化 SQL,

在 MySQL 5.6.11 中,引入了引數 log_slow_slave_statements ,可將 SQL 重放程序中執行時長超過 long_query_time 的操作記錄在慢日志中,

表上沒有任何索引,且二進制日志格式為 ROW

同樣,在一段時間內,Relay_Master_Log_File , Exec_Master_Log_Pos 不會變化,

如果表上沒有任何索引,對它進行操作,在主庫上只是一次全表掃描,但在從庫重放時,因為是 ROW 格式,對于每條記錄的操作都會進行一次全表掃描,

還是上面的表,同樣的操作,只不過二進制日志格式為 ROW ,在主庫上執行用了 7.53s ,但 Seconds_Behind_Master 最大卻達到了 723s ,是 STATEMENT 格式下的 100 倍,

mysql> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.00 sec)

mysql> delete from sbtest.sbtest1 where id <= 100;
Query OK, 100 rows affected (7.53 sec)

如果因為表上沒有任何索引,導致主從延遲過大,常見的優化方案如下:

  1. 在從庫上臨時創建個索引,加快記錄的重放,注意,盡量選擇一個區分度高的列添加索引,列的區分度越高,重放的速度就越快,

  2. 將引數 slave_rows_search_algorithms 設定為 INDEX_SCAN,HASH_SCAN ,

    設定后,對于同樣的操作,Seconds_Behind_Master 最大只有 53s ,

大事務

這里的大事務,指的是二進制日志格式為 ROW 的情況下,操作涉及的記錄數較多,

還是上面的測驗表,只不過這次 id 列是自增主鍵,執行批量更新操作,更新操作如下,其中,N 是記錄數,M 是一個隨機字符,每次操作的字符均不一樣,

update sbtest.sbtest1 set c=repeat(M,120) where id<=N

接下來我們看看不同記錄數下對應 Seconds_Behind_Master 的最大值,

記錄數主庫執行時長(s)Seconds_Behind_Master最大值(s)
50000 0.76 1
200000 3.10 8
500000 17.32 39
1000000 63.47 122

可見,隨著記錄數的增加,Seconds_Behind_Master 也是不斷增加的,

所以對于大事務操作,建議分而治之,每次小批量執行,

判斷一個 binlog 是否存在大事務,可通過我之前寫的一個 binlog_summary.py 的工具來分析,該工具的具體用法可參考:Binlog分析利器-binlog_summary.py

從庫上有查詢操作

從庫上有查詢操作,通常會有兩方面的影響:

1. 消耗系統資源,

2. 鎖等待,

常見的是從庫的查詢操作堵塞了主庫的 DDL 操作,看下面這個示例,

mysql> show processlist;
+----+-----------------+-----------------+------+---------+------+----------------------------------+----------------------------------------+
| Id | User            | Host            | db   | Command | Time | State                            | Info                                   |
+----+-----------------+-----------------+------+---------+------+----------------------------------+----------------------------------------+
|  5 | event_scheduler | localhost       | NULL | Daemon  | 2239 | Waiting on empty queue           | NULL                                   |
| 17 | root            | localhost       | NULL | Query   |    0 | init                             | show processlist                       |
| 18 | root            | localhost       | NULL | Query   |   19 | User sleep                       | select id,sleep(1) from sbtest.sbtest1 |
| 19 | system user     | connecting host | NULL | Connect |  243 | Waiting for source to send event | NULL                                   |
| 20 | system user     |                 |      | Query   |   13 | Waiting for table metadata lock  | alter table sbtest.sbtest1 add c2 int  |
+----+-----------------+-----------------+------+---------+------+----------------------------------+----------------------------------------+
5 rows in set (0.00 sec)

從庫上存在備份

常見的是備份的全域讀鎖阻塞了 SQL 執行緒的重放,看下面這個示例,

mysql> show processlist;
+----+-----------------+-----------------+------+---------+------+----------------------------------+----------------------------------------+
| Id | User            | Host            | db   | Command | Time | State                            | Info                                   |
+----+-----------------+-----------------+------+---------+------+----------------------------------+----------------------------------------+
|  5 | event_scheduler | localhost       | NULL | Daemon  | 4177 | Waiting on empty queue           | NULL                                   |
| 17 | root            | localhost       | NULL | Query   |    0 | init                             | show processlist                       |
| 18 | root            | localhost       | NULL | Query   |   36 | User sleep                       | select id,sleep(1) from sbtest.sbtest2 |
| 19 | system user     | connecting host | NULL | Connect | 2181 | Waiting for source to send event | NULL                                   |
| 20 | system user     |                 |      | Query   |    2 | Waiting for global read lock     | alter table sbtest.sbtest1 add c1 int  |
| 28 | root            | localhost       | NULL | Query   |   17 | Waiting for table flush          | flush tables with read lock            |
+----+-----------------+-----------------+------+---------+------+----------------------------------+----------------------------------------+
6 rows in set (0.00 sec)

磁盤 IO 存在瓶頸

這個時候可調整從庫的雙一設定或關閉 binlog,

總結

綜合上面的分析,主從延遲的常見原因及解決方法如下圖所示,

 

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/550513.html

標籤:MySQL

上一篇:8款資料遷移工具選型,主流且實用!

下一篇:MySQL 主從延遲的常見原因及解決方法

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more