主頁 > 資料庫 > MySQL DDL執行方式-Online DDL介紹

MySQL DDL執行方式-Online DDL介紹

2022-09-22 10:08:03 資料庫

1 引言

大家好,今天與大家一起分享一下 mysql DDL執行方式,

一般來說MySQL分為DDL(定義)和DML(操作),

  • DDL:Data Definition Language,即資料定義語言,那相關的定義操作就是DDL,包括:新建、修改、洗掉等;相關的命令有:CREATE,ALTER,DROP,TRUNCATE截斷表內容(開發期,還是挺常用的),COMMENT 為資料字典添加備注,
  • DML:Data Manipulation Language,即資料操作語言,即處理資料庫中資料的操作就是DML,包括:選取,插入,更新,洗掉等;相關的命令有:SELECT,INSERT,UPDATE,DELETE,還有 LOCK TABLE,以及不常用的CALL – 呼叫一個PL/SQL或Java子程式,EXPLAIN PLAN – 決議分析資料訪問路徑,

我們可以認為:

  • CREATE,ALTER ,DROP,TRUNCATE,定義相關的命令就是DDL;
  • SELECT,INSERT,UPDATE,DELETE,操作處理資料的命令就是DML;

DDL、DML區別:

  • DML操作是可以手動控制事務的開啟、提交和回滾的,
  • DDL操作是隱性提交的,不能rollback,一定要謹慎哦!

日常開發我們對一條DML陳述句較為熟悉,很多開發人員都了解sql的執行程序,比較熟悉,但是DDL是如何執行的呢,大部分開發人員可能不太關心,也認為沒必要了解,都交給DBA吧, 其實不然,了解一些能盡量避開一些ddl的坑,那么下面帶大家一起了解一下DDL執行的方式,也算拋磚引玉吧,如有錯誤,還請各位大佬們指正,

2 概述

在MySQL使用程序中,根據業務的需求對表結構進行變更是個普遍的運維操作,這些稱為DDL操作,常見的DDL操作有在表上增加新列或給某個列添加索引,

我們常用的易維平臺提供了兩種方式可執行DDL,包括MySQL原生在線DDL(online DDL)以及一種第三方工具pt-osc,

下圖是執行方式的性能對比及說明:

 

本文將對DDL的執行工具之Online DDL進行簡要介紹及分析,pt-osc會專門再進行介紹,

3 介紹

MySQL Online DDL 功能從 5.6 版本開始正式引入,發展到現在的 8.0 版本,經歷了多次的調整和完善,其實早在 MySQL 5.5 版本中就加入了 INPLACE DDL 方式,但是因為實作的問題,依然會阻塞 INSERT、UPDATE、DELETE 操作,這也是 MySQL 早期版本長期被吐槽的原因之一,

在MySQL 5.6版本以前,最昂貴的資料庫操作之一就是執行DDL陳述句,特別是ALTER陳述句,因為在修改表時,MySQL會阻塞整個表的讀寫操作,例如,對表 A 進行 DDL 的具體程序如下:

  1. 按照表 A 的定義新建一個表 B
  2. 對表 A 加寫鎖
  3. 在表 B 上執行 DDL 指定的操作
  4. 將 A 中的資料拷貝到 B
  5. 釋放 A 的寫鎖
  6. 洗掉表 A
  7. 將表 B 重命名為 A

在以上 2-4 的程序中,如果表 A 資料量比較大,拷貝到表 B 的程序會消耗大量時間,并占用額外的存盤空間,此外,由于 DDL 操作占用了表 A 的寫鎖,所以表 A 上的 DDL 和 DML 都將阻塞無法提供服務,

如果遇到巨大的表,可能需要幾個小時才能執行完成,勢必會影回應用程式,因此需要對這些操作進行良好的規劃,以避免在高峰時段執行這些更改,對于那些要提供全天候服務(24*7)或維護時間有限的人來說,在大表上執行DDL無疑是一場真正的噩夢,

因此,MySQL官方不斷對DDL陳述句進行增強,自MySQL 5.6 起,開始支持更多的 ALTER TABLE 型別操作來避免資料拷貝,同時支持了在線上 DDL 的程序中不阻塞 DML 操作,真正意義上的實作了 Online DDL,即在執行 DDL 期間允許在不中斷資料庫服務的情況下執行DML(insert、update、delete),然而并不是所有的DDL操作都支持在線操作,到了 MySQL 5.7,在 5.6 的基礎上又增加了一些新的特性,比如:增加了重命名索引支持,支持了數值型別長度的增大和減小,支持了 VARCHAR 型別的在線增大等,但是基本的實作邏輯和限制條件相比 5.6 并沒有大的變化,

4 用法

ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;

ALTER 陳述句中可以指定引數 ALGORITHM 和 LOCK 分別指定 DDL 執行的演算法模式和 DDL 期間 DML 的鎖控制模式,

  • ALGORITHM=INPLACE 表示執行DDL的程序中不發生表拷貝,程序中允許并發執行DML(INPLACE不需要像COPY一樣占用大量的磁盤I/O和CPU,減少了資料庫負載,同時減少了buffer pool的使用,避免 buffer pool 中原有的查詢快取被大量洗掉而導致的性能問題),
  • 如果設定 ALGORITHM=COPY,DDL 就會按 MySQL 5.6 之前的方式,采用表拷貝的方式進行,程序中會阻塞所有的DML,另外也可以設定 ALGORITHEM=DAFAULT,讓 MySQL 以盡量保證 DML 并發操作的原則選擇執行方式,
  • LOCK=NONE 表示對 DML 操作不加鎖,DDL 程序中允許所有的 DML 操作,此外還有 EXCLUSIVE(持有排它鎖,阻塞所有的請求,適用于需要盡快完成DDL或者服務庫空閑的場景)、SHARED(允許SELECT,但是阻塞INSERT UPDATE DELETE,適用于資料倉庫等可以允許資料寫入延遲的場景)和 DEFAULT(根據DDL的型別,在保證最大并發的原則下來選擇LOCK的取值),

5 兩種演算法

第一種 Copy:

  1. 按照原表定義創建一個新的臨時表;
  2. 對原表加寫鎖(禁止DML,允許select);
  3. 在步驟1 建立的臨時表執行 DDL;
  4. 將原表中的資料 copy 到臨時表;
  5. 釋放原表的寫鎖;
  6. 將原表洗掉,并將臨時表重命名為原表,
  7. 從上可見,采用 copy 方式期間需要鎖表,禁止DML,因此是非Online的,比如:洗掉主鍵、修改列型別、修改字符集,這些操作會導致行記錄格式發生變化(無法通過全量 + 增量實作 Online),

第二種 Inplace:

在原表上進行更改,不需要生成臨時表,不需要進行資料copy的程序,根據是否行記錄格式,又可分為兩類:

  • rebuild:需要重建表(重新組織聚簇索引),比如 optimize table、添加索引、添加/洗掉列、修改列 NULL/NOT NULL 屬性等;
  • no-rebuild:不需要重建表,只需要修改表的元資料,比如洗掉索引、修改列名、修改列默認值、修改列自增值等,

對于 rebuild 方式實作 Online 是通過快取 DDL 期間的 DML,待 DDL 完成之后,將 DML 應用到表上來實作的,例如,執行一個 alter table A engine=InnoDB; 重建表的 DDL 其大致流程如下:

  1. 建立一個臨時檔案,掃描表 A 主鍵的所有資料頁;
  2. 用資料頁中表 A 的記錄生成 B+ 樹,存盤到臨時檔案中;
  3. 生成臨時檔案的程序中,將所有對 A 的操作記錄在一個日志檔案(row log)中;
  4. 臨時檔案生成后,將日志檔案中的操作應用到臨時檔案,得到一個邏輯資料上與表 A 相同的資料檔案;
  5. 用臨時檔案替換表 A 的資料檔案,

說明:

  1. 在 copy 資料到新表期間,在原表上是加的 MDL 讀鎖(允許 DML,禁止 DDL);
  2. 在應用增量期間對原表加 MDL 寫鎖(禁止 DML 和 DDL);
  3. 根據表 A 重建出來的資料是放在 tmp_file 里的,這個臨時檔案是 InnoDB 在內部創建出來的,整個 DDL 程序都在 InnoDB 內部完成,對于 server 層來說,沒有把資料挪動到臨時表,是一個原地操作,這就是”inplace”名稱的來源,

使用Inplace方式執行的DDL,發生錯誤或被kill時,需要一定時間的回滾期,執行時間越長,回滾時間越長,

使用Copy方式執行的DDL,需要記錄程序中的undo和redo日志,同時會消耗buffer pool的資源,效率較低,優點是可以快速停止,

不過并不是所有的 DDL 操作都能用 INPLACE 的方式執行,具體的支持情況可以在(在線 DDL 操作) 中查看,

以下是常見DDL操作:

 

官網支持串列:

 

6 執行程序

Online DDL主要包括3個階段,prepare階段,ddl執行階段,commit階段,下面將主要介紹ddl執行程序中三個階段的流程,

1)Prepare階段:初始化階段會根據存盤引擎、用戶指定的操作、用戶指定的 ALGORITHM 和 LOCK 計算 DDL 程序中允許的并發量,這個程序中會獲取一個 shared metadata lock,用來保護表的結構定義,

  • 創建新的臨時frm檔案(與InnoDB無關),
  • 持有EXCLUSIVE-MDL鎖,禁止讀寫,
  • 根據alter型別,確定執行方式(copy,online-rebuild,online-norebuild),假如是Add Index,則選擇online-norebuild即INPLACE方式,
  • 更新資料字典的記憶體物件,
  • 分配row_log物件來記錄增量(僅rebuild型別需要),
  • 生成新的臨時ibd檔案(僅rebuild型別需要) ,
  • 資料字典上提交事務、釋放鎖,

注:Row log是一種獨占結構,它不是redo log,它以Block的方式管理DML記錄的存放,一個Block的大小為由引數innodb_sort_buffer_size控制,默認大小為1M,初始化階段會申請兩個Block,

2)DDL執行階段:執行期間的 shared metadata lock 保證了不會同時執行其他的 DDL,但 DML 能可以正常執行,

  • 降級EXCLUSIVE-MDL鎖,允許讀寫(copy不可寫),
  • 掃描old_table的聚集索引每一條記錄rec,
  • 遍歷新表的聚集索引和二級索引,逐一處理,
  • 根據rec構造對應的索引項
  • 將構造索引項插入sort_buffer塊排序,
  • 將sort_buffer塊更新到新的索引上,
  • 記錄ddl執行程序中產生的增量(僅rebuild型別需要)
  • 重放row_log中的操作到新索引上(no-rebuild資料是在原表上更新的),
  • 重放row_log間產生dml操作append到row_log最后一個Block,

3)Commit階段:將 shared metadata lock 升級為 exclusive metadata lock,禁止DML,然后洗掉舊的表定義,提交新的表定義,

  • 當前Block為row_log最后一個時,禁止讀寫,升級到EXCLUSIVE-MDL鎖,
  • 重做row_log中最后一部分增量,
  • 更新innodb的資料字典表,
  • 提交事務(刷事務的redo日志),
  • 修改統計資訊,
  • rename臨時idb檔案,frm檔案,
  • 變更完成,

 

Online DDL 程序中占用 exclusive MDL 的步驟執行很快,所以幾乎不會阻塞 DML 陳述句,
不過,在 DDL 執行前或執行時,其他事務可以獲取 MDL,由于需要用到 exclusive MDL,所以必須要等到其他占有 metadata lock 的事務提交或回滾后才能執行上面兩個涉及到 MDL 的地方,

7 踩坑

前面提到 Online DDL 執行程序中需要獲取 MDL,MDL (metadata lock) 是 MySQL 5.5 引入的表級鎖,在訪問一個表的時候會被自動加上,以保證讀寫的正確性,當對一個表做 DML 操作的時候,加 MDL 讀鎖;當做 DDL 操作時候,加 MDL 寫鎖,

為了在大表執行 DDL 的程序中同時保證 DML 能并發執行,前面使用了 ALGORITHM=INPLACE 的 Online DDL,但這里仍然存在死鎖的風險,問題就出在 Online DDL 程序中需要 exclusive MDL 的地方,

例如,Session 1 在事務中執行 SELECT 操作,此時會獲取 shared MDL,由于是在事務中執行,所以這個 shared MDL 只有在事務結束后才會被釋放,

# Session 1> START TRANSACTION;> SELECT * FROM tbl_name;# 正常執行

這時 Session 2 想要執行 DML 操作也只需要獲取 shared MDL,仍然可以正常執行,

# Session 2> SELECT * FROM tbl_name;# 正常執行

但如果 Session 3 想執行 DDL 操作就會阻塞,因為此時 Session 1 已經占用了 shared MDL,而 DDL 的執行需要先獲取 exclusive MDL,因此無法正常執行,

# Session 3> ALTER TABLE tbl_name ADD COLUMN n INT;# 阻塞

通過 show processlist 可以看到 ALTER 操作正在等待 MDL,

+----+-----------------+------------------+------+---------+------+---------------------------------+-----------------+
| Id | User            | Host             | db   | Command | Time | State                           | Info            |│----+-----------------+------------------+------+---------+------+---------------------------------+-----------------+
| 11 | root            | 172.17.0.1:53048 | demo | Query   |    3 | Waiting for table metadata lock | alter table ... |+----+-----------------+------------------+------+---------+------+---------------------------------+-----------------+

由于 exclusive MDL 的獲取優先于 shared MDL,后續嘗試獲取 shared MDL 的操作也將會全部阻塞

# Session 4> SELECT * FROM tbl_name;# 阻塞

到這一步,后續無論是 DML 和 DDL 都將阻塞,直到 Session 1 提交或者回滾,Session 1 占用的 shared MDL 被釋放,后面的操作才能繼續執行,

上面這個問題主要有兩個原因:

  1. Session 1 中的事務沒有及時提交,因此阻塞了 Session 3 的 DDL
  2. Session 3 Online DDL 阻塞了后續的 DML 和 DDL

對于問題 1,有些ORM框架默認將用戶陳述句封裝成事務執行,如果客戶端程式中斷退出,還沒來得及提交或者回滾事務,就會出現 Session 1 中的情況,那么此時可以在 infomation_schema.innodb_trx 中找出未完成的事務對應的執行緒,并強制退出,

> SELECT * FROM information_schema.innodb_trx\G*************************** 1. row ***************************trx_id: 421564480355704trx_state: RUNNINGtrx_started: 2022-05-01 014:49:41trx_requested_lock_id: NULLtrx_wait_started: NULLtrx_weight: 0trx_mysql_thread_id: 9trx_query: NULLtrx_operation_state: NULLtrx_tables_in_use: 0trx_tables_locked: 0trx_lock_structs: 0trx_lock_memory_bytes: 1136trx_rows_locked: 0trx_rows_modified: 0trx_concurrency_tickets: 0trx_isolation_level: REPEATABLE READtrx_unique_checks: 1trx_foreign_key_checks: 1trx_last_foreign_key_error: NULLtrx_adaptive_hash_latched: 0trx_adaptive_hash_timeout: 0trx_is_read_only: 0trx_autocommit_non_locking: 0trx_schedule_weight: NULL1 row in set (0.0025 sec)

可以看到 Session 1 正在執行的事務對應的 trx_mysql_thread_id 為 9,然后執行 KILL 9 即可中斷 Session 1 中的事務,
對于問題 2,在查詢很多的情況下,會導致阻塞的 session 迅速增多,對于這種情況,可以先中斷 DDL 操作,防止對服務造成過大的影響,也可以嘗試在從庫上修改表結構后進行主從切換或者使用 pt-osc 等第三方工具,

8 限制

  • 僅適用于InnoDB(語法上它可以與其他存盤引擎一起使用,如MyISAM,但MyISAM只允許algorithm = copy,與傳統方法相同);
  • 無論使用何種鎖(NONE,共享或排它),在開始和結束時都需要一個短暫的時間來鎖表(排它鎖);
  • 在添加/洗掉外鍵時,應該禁用 foreign_key_checks 以避免表復制;
  • 仍然有一些 alter 操作需要 copy 或 lock 表(老方法),有關哪些表更改需要表復制或表鎖定,請查看官網;
  • 如果在表上有 ON … CASCADE 或 ON … SET NULL 約束,則在 alter table 陳述句中不允許LOCK = NONE;
  • Online DDL會被復制到從庫(同主庫一樣,如果 LOCK = NONE,從庫也不會加鎖),但復制本身將被阻止,因為 alter 在從庫以單執行緒執行,這將導致主從延遲問題,

官方參考資料:https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-limitations.html

9 總結

本次和大家一起了解SQL的DDL、DML及區別,也介紹了Online DDL的執行方式,

目前可用的DDL操作工具包括pt-osc,github的gh-ost,以及MySQL提供的在線修改表結構命令Online DDL,pt-osc和gh-ost均采用拷表方式實作,即創建個空的新表,通過select+insert將舊表中的記錄逐次讀取并插入到新表中,不同之處在于處理DDL期間業務對表的DML操作,

到了MySQL 8.0 官方也對 DDL 的實作重新進行了設計,其中一個最大的改進是 DDL 操作支持了原子特性,另外,Online DDL 的 ALGORITHM 引數增加了一個新的選項:INSTANT,只需修改資料字典中的元資料,無需拷貝資料也無需重建表,同樣也無需加排他 MDL 鎖,原表資料也不受影響,整個 DDL 程序幾乎是瞬間完成的,也不會阻塞 DML,不過目前8.0的INSTANT使用范圍較小,后續再對8.0的INSTANT做詳細介紹吧,

另外,易維平臺也提供了pt-osc的執行方式,下次再與大家一起分享pt-osc的執行方式吧,敬請期待!


作者:劉鄧忠

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

標籤:MySQL

上一篇:一條sql了解MYSQL的架構設計

下一篇:MySQL DDL執行方式-Online DDL介紹

標籤雲
其他(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