當前位置:首頁 » 幣種行情 » 學Trx的好處簡潔

學Trx的好處簡潔

發布時間: 2022-02-09 00:46:34

Ⅰ MySQL 5.7中新增sys schema有什麼好處

性能優化利器:剖析MySQL 5.7新特徵 sys schema


導讀:很多團隊在評估合適的時機切換到 MySQL 5.7,本文是在高可用架構群的分享,介紹 MySQL 5.7 新的性能分析利器。

李春,現任科技 MySQL 負責人,高級 MySQL 資料庫專家,從事 MySQL 開發和運維工作 8 年。在擔任 MySQL 資料庫 leader 期間,主要負責應用架構的優化和部署,實現了阿里巴巴 3 億 產品 從 Oracle 小型機到 64 台 MySQL 的平滑遷移。專注於研究 MySQL 復制、高可用、分布式和運維自動化相關領域。在大規模、分布式 MySQL 集群管理、調優、快速定位和解決問題方面有豐富經驗。管理超過 1400 台 MySQL 伺服器,近 3000 個實例。完成 MySQL 自動裝機系統、MySQL 標准化文檔和操作手冊、MySQL 自動規范性檢查系統、MySQL 自動信息採集系統等標准化文檔和自動化運維工具。

sys schema 由來

Performance schema 引入

Oracle 早就有了 v$ 等一系列方便診斷資料庫性能的工具,MySQL DBA 只有羨慕嫉妒恨的份,但是 5.7 引入的 sys schema 緩解了這個問題,讓我們可以通過 sys schema 一窺 MySQL 性能損耗,診斷 MySQL 的各種問題。

說到診斷 MySQL 性能問題,不得不提在 MySQL 5.5 引入的 performance_schema,最開始引入時,MySQL 的 performance_schema 性能消耗巨大,隨著版本的更新和代碼優化,5.7 的 performance_schema 對 MySQL 伺服器額外的消耗越來越少,我們可以放心的打開 performance_shema 來收集 MySQL 資料庫的性能損耗。Tarique Saleem 同學測試了一下 sys schema 對 CPU 和 IO的額外消耗,基本在 1% - 3% 之間,有興趣的同學可以參考他的這篇 blog:

(CPU Bound, Sysbench Read Only Mode)

performance_schema 不僅由於他的性能消耗大著名,還由於其復雜難用而臭名昭著。5.7 上的 performance schema 已經有 87 張表了,每個表都是各種統計信息的羅列;另外,他的這些表和 information_schema 中的部分表也纏夾不清,讓大家用得很不習慣。

sys schema VS performance schema VS information schema

現在 MySQL 在 5.7 又新增了sys schema,它和 performance_schema 和 information schema 到底是什麼關系?

Information_schema 定位基本是 MySQL 元數據信息,比如:TABLES 記錄了 MySQL 有哪些表,COLUMNS 記錄了各個表有哪些列 。

performance_schema 記錄了 MySQL 實時底層性能消耗情況,比如:events_waits_current 記錄了 MySQL 各個線程當前在等待的 event。

雖然他們之間的這個定位區別並沒有那麼明顯:比如,Information_schema 的 innodb_locks 就記錄了 innodb 當前鎖的信息,它並不是 MySQL 的元數據信息。sys schema 最開始是 MarkLeith 同學為了方便讀取和診斷 MySQL 性能引入到 MySQL 的。所以 sys schema 定位應該是最清晰的:它包含一系列對象,這些對象能夠輔助 DBA 和開發人員了解 performance schema 和 information_schema 採集的數據。

sys schema 包含了什麼?

sys schema 包含一些對象,這些對象主要用於調優和故障分析。包括:

將 performance schema 和 information schema 中的數據用更容易理解的方式來總結歸納出來的「視圖」。

提供 performance schema 和 information schema 配置或者生成分析報告類似操作的「存儲過程」

sys schema 本身不採集和存儲什麼信息,它只是為程序或者用戶提供一個更加方便的診斷系統性能和排除故障的「介面」。也就是說,查詢 performance schema 和 information schema 配置和提供格式化服務的「存儲函數」。

避免用戶在 information schema 和 performance schema 中寫各種復雜的查詢來獲得到底誰鎖了誰,每個線程消耗的內存是多少 ( 視圖 memory_by_thread_by_current_bytes ),每個 SQL 執行了多少次,大致的執行時間是多少( 視圖 statements_with_runtimes_in_95th_percentile )等,這些 sys schema 都直接幫你寫好,你只需要直接查詢就好了。

編寫了一些現成的存儲過程,方便你:直接使用 diagnostics() 存儲過程創建用於診斷當前伺服器狀態的報告;使用 ps_trace_thread() 存儲過程創建對應線程的圖形化( .dot類型 )性能數據。

編寫了一些現成的存儲函數,方便你:直接使用 ps_thread_account() 存儲函數獲得發起這個線程的用戶,使用 ps_thread_trx_info() 來獲得某線程當前事務或者歷史執行過的語句( JSON 格式返回 )。

當然,你也可以在 sys schema 下增加自己用於診斷 MySQL 性能的「視圖」、「存儲過程」和「存儲函數」。

sys schema 舉例

怎麼利用 sys schema 來定位問題和診斷資料庫性能?這里簡單舉一個 innodb 行鎖的例子來說明。

模擬行鎖

拿一個實際的場景來說 sys schema 能夠輔助我們分析當前資料庫上哪個 session 被鎖住了,並且提供「清理」鎖的語句。我們模擬一個表的某一行被鎖住的情況,假設表創建語句如下:

CREATE TABLE `test2` (

`id` int(11) NOT NULL,

`name` varchar(16) DEFAULT NULL,

`age` int(11) DEFAULT NULL,

`sex` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1

有一條數據如下:

mysql > select * from test2;

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

| id | name | age | sex |

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

| 2 | pickup1 | 1 | 1 |

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

我們分別在 session 1 和 session 2 上同時操作這條數據,這樣的話必然對同一行記錄相互有鎖死的情況,然後我們通過 session 3 來查看 sys schema 裡面的 innodb_lock_waits,確定到底是誰鎖了誰,怎麼解鎖?操作步驟如下:

通過 sys.innodb_lock_waits 查看 innodb 鎖表情況

對應的在 session 3上查看到的記錄:

mysql > select * from sys.innodb_lock_waitsG

*************************** 1. row ***************************

wait_started: 2016-05-04 01:04:38

wait_age: 00:00:02

wait_age_secs: 2

locked_table: `test`.`test2`

locked_index: PRIMARY

locked_type: RECORD

waiting_trx_id: 5382

waiting_trx_started: 2016-05-04 00:24:21

waiting_trx_age: 00:40:19

waiting_trx_rows_locked: 4

waiting_trx_rows_modified: 0

waiting_pid: 3

waiting_query: update test2 set name='pickup3' where id=2

waiting_lock_id: 5382:31:3:3

waiting_lock_mode: X

blocking_trx_id: 5381

blocking_pid: 2

blocking_query: NULL

blocking_lock_id: 5381:31:3:3

blocking_lock_mode: X

blocking_trx_started: 2016-05-04 00:23:49

blocking_trx_age: 00:40:51

blocking_trx_rows_locked: 1

blocking_trx_rows_modified: 1

sql_kill_blocking_query: KILL QUERY 2

sql_kill_blocking_connection: KILL 2

這里我們可以看到 3 號線程( waiting_pid: 3 )在等待 2 號線程( blocking_pid: 2 )的 X 鎖( blocking_lock_mode: X ),如果需要解鎖,需要殺掉 2 號線程( sql_kill_blocking_connection: KILL 2 )。

innodb_lock_waits 本質

其實 sys schema 的 innodb_lock_waits 只是 information schema 的視圖而已。

CREATE ALGORITHM = TEMPTABLE DEFINER = `mysql.sys`@`localhost` SQL SECURITY INVOKER VIEW `innodb_lock_waits` AS

SELECT

`r`.`trx_wait_started` AS `wait_started`,

TIMEDIFF(NOW(),

`r`.`trx_wait_started`) AS `wait_age`,

TIMESTAMPDIFF(

SECOND,

`r`.`trx_wait_started`,

NOW()) AS `wait_age_secs`,

`rl`.`lock_table` AS `locked_table`,

`rl`.`lock_index` AS `locked_index`,

`rl`.`lock_type` AS `locked_type`,

`r`.`trx_id` AS `waiting_trx_id`,

`r`.`trx_started` AS `waiting_trx_started`,

TIMEDIFF(NOW(),

`r`.`trx_started`) AS `waiting_trx_age`,

`r`.`trx_rows_locked` AS `waiting_trx_rows_locked`,

`r`.`trx_rows_modified` AS `waiting_trx_rows_modified`,

`r`.`trx_mysql_thread_id` AS `waiting_pid`,

`sys`.`format_statement`(`r`.`trx_query`) AS `waiting_query`,

`rl`.`lock_id` AS `waiting_lock_id`,

`rl`.`lock_mode` AS `waiting_lock_mode`,

`b`.`trx_id` AS `blocking_trx_id`,

`b`.`trx_mysql_thread_id` AS `blocking_pid`,

`sys`.`format_statement`(`b`.`trx_query`) AS `blocking_query`,

`bl`.`lock_id` AS `blocking_lock_id`,

`bl`.`lock_mode` AS `blocking_lock_mode`,

`b`.`trx_started` AS `blocking_trx_started`,

TIMEDIFF(NOW(),

`b`.`trx_started`) AS `blocking_trx_age`,

`b`.`trx_rows_locked` AS `blocking_trx_rows_locked`,

`b`.`trx_rows_modified` AS `blocking_trx_rows_modified`,

CONCAT(

'KILL QUERY ',

`b`.`trx_mysql_thread_id`

) AS `sql_kill_blocking_query`,

CONCAT('KILL ',

`b`.`trx_mysql_thread_id`) AS `sql_kill_blocking_connection`

FROM

(

(

(

(

`information_schema`.`innodb_lock_waits` `w`

JOIN

`information_schema`.`innodb_trx` `b` ON((`b`.`trx_id` = `w`.`blocking_trx_id`))

)

JOIN

`information_schema`.`innodb_trx` `r` ON(

(`r`.`trx_id` = `w`.`requesting_trx_id`)

)

)

JOIN

`information_schema`.`innodb_locks` `bl` ON(

(

`bl`.`lock_id` = `w`.`blocking_lock_id`

)

)

)

JOIN

`information_schema`.`innodb_locks` `rl` ON(

(

`rl`.`lock_id` = `w`.`requested_lock_id`

)

)

)

ORDER BY

`r`.`trx_wait_started`

innodb_lock_waits和x$innodb_lock_waits區別

有心的同學可能會注意到,sys schema 裡面有 innodb_lock_waits 和 x$innodb_lock_waits。其實 sys schema 的這些視圖大部分都成對出現,其中一個的名字除了 x$ 前綴以外跟另外一個是一模一樣的。例如,host_summmary_by_file_io 視圖分析匯總的是根據主機匯總的文件 IO 情況,並將延遲從皮秒( picoseconds )轉換成更加易讀值( 帶單位 )顯示出來:

mysql> SELECT * FROM host_summary_by_file_io;

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

| host | ios | io_latency |

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

| localhost | 67570 | 5.38 s |

| background | 3468 | 4.18 s |

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

而 x$host_summary_by_file_io 視圖分析匯總的是同樣的數據,但是顯示的是未格式化過的皮秒( picosecond )延遲值

mysql> SELECT * FROM x$host_summary_by_file_io;

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

| host | ios | io_latency |

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

| localhost | 67574 | 5380678125144 |

| background | 3474 | 4758696829416 |

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

沒有 x$ 前綴的視圖是為了提供更加友好,對人更加易讀的輸出格式。帶 x$ 前綴的視圖顯示了數據原始格式,它方便其他工具基於這些數據進行自己的處理。需要了解非 x$ 和 x$ 視圖的不同點的進一步信息。

Q&A

提問:sys schema 只是在 performance_schema 和 information_schema 之上創建視圖和存儲過程?

李春:對,sys schema 主要針對的其實是 iperformance schema,有部分 information schema 的表也會整理到 sys schema 中統一展現。

提問:運行 KILL 2 殺掉 2 線程?blocking_lock_mode: X 的 X 什麼意思?

李春:blocking_lock_mode 的 X 是指 X 鎖,exclusive 鎖,排它鎖,跟它對應的是 S 鎖,共享鎖。kill 2 是殺掉 2 號線程,這樣可以將鎖釋放,讓被鎖的這個線程正常執行下去。

提問:可以放心的打開 performance_schema,為何不使用 performance_schema 再造一個 sys schema?

李春:performance schema 是 MySQL 採集資料庫性能的存儲空間。sys schema 其實只是對 performance schema 多個表 join 和整合。兩者的定位有所不同,如果直接放在 performance schema 中,分不清哪些是基表,哪些是視圖,會比較混淆。

提問:pt-query-digest 這些工具的有開始使用 sys schema 嗎?

李春:沒有,pt-query-digest 主要用於分析慢查和 tcpmp 的結果,跟 sys schema 的定位有部分重疊的地方,sys schema 會分析得更細,更內核,更偏底層一些,pt-query-digest 主要還是從慢查和 tcpmp 中抽取 SQL 來格式化展現。

提問:阿里這么多資料庫實例,使用什麼運維工具?分布式事務又是怎麼解決的呢?

李春:阿里內部有非常多的運維工具,dbfree,idb 等,用於資料庫資源池管理,資料庫脫敏,開發測試庫同步,資料庫訂正,表結構變更等。分布式事務主要通過業務上的修改去屏蔽掉,比如:電影買票並不是你選了座位和付款就必須在一個事務裡面,搶票,選座,付款分別是自己的子事務,系統耦合性比較弱,相互通知解決問題。

提問:Oracle 有 v$,MySQL 有 x$ ?兩個 $ 是完成相似功能的嗎?

李春:MySQL 的 x$ 可以說是仿照 Oracle 的 v$ 來做的,但是目前離 Oracle 的那麼強大的資料庫診斷功能還有一些距離。

提問:資料庫脫敏能否簡單介紹下實現方式?

李春:開發測試人員無法訪問線上資料庫,需要通過一個專門的 idb 來訪問,而 idb 系統每個欄位都有密級定義,滿足許可權的才能被訪問;這個系統頁控制了用戶是否可以訪問某個表,可以訪問數據表的行數,只有主管同意了,用戶才能訪問某個表的數據,並且加密數據是以*顯示的。

Ⅱ 厭倦了杠鈴訓練,有什麼其他新穎的鍛煉方式推薦嗎

今天我們要教大家的不是一般的訓練動作,我想很多人已經對啞鈴,杠鈴或者固定器械的訓練產生了厭倦,因為我們已經做了非常久了,那我們就來教教大家,如何利用其它東西來進行訓練,今天我們要提到的一個東西叫做TRX繩索,讓你體驗更新穎的鍛煉方式。

動作要領:這個動作我們每隻腳做10秒,雙手抓住TRX繩索保持平衡,降低我們的身體重心,身體往後就可以開始,抬起一隻腳朝下蹲,其實和單腳深蹲有點像,但是單腳深蹲需要我們有極高的核心能力,這個動作有繩索作為輔助就可以讓我們更加穩健的去掌握好動作,所以也是非常推薦的。

以上六個動作,都是我們隨時可以進行的,只要我們擁有一根TRX繩索,找到一個可以固定的高處,就可以進行了,如果你學會了,就會節省很多時間,讓你隨時隨地都可以進行鍛煉。

Ⅲ 力量訓練有什麼好處哪些經典動作最實用

小編發現現在很多男生都很喜歡去力量區進行力量訓練,而且現在很多的女生也不排斥力量訓練,都加入到了我們的力量訓練中,那麼為什麼力量訓練有這么大的魅力呢?小編今天就來給你們講一講力量訓練的好處,以及一些力量訓練的動作推薦。

首先這么多人都願意參加力量訓練,肯定是好吹多多的,比如我們通過力量訓練,男性可以看起來更加的有安全感,我們女孩子通過力量訓練,可以讓我們的全身的肉變的更加的緊致,從而身材看起來更加的性感迷人,例如:深蹲練臀,卧推練胸等等。

當然如果我們一開始難以完成這些動作,我們可以慢慢來,不要著急,這個結論在我們任何的訓練動作中都適用,我們的復合型的動作是需要在一定的基礎上完成的。

如果你們覺得復合型的動作比較有意思,小編我在以後的文章中,肯定會分享更多的復合型的動作跟大家一起討論學習,我們一起共同進步,一起把自己變得更好。

Ⅳ 單片機C語言,每個中斷都開頭加一個TRx=0;結尾加一個TRx=1;雖然精度提高了,但是有沒有副作用呢

匯編語言編程中,一般而言,定時器中斷服務程序,開始是TRx=0暫停定時器,等修改完初值後,再TRx=1恢復定時器工作,這是為了防止在修改初值時出現錯誤的穩妥辦法。當然代價就是損失幾個機器周期的計時時間。對於精確定時而言會造成一定的誤差。

Ⅳ 安川變頻器v1000旁路中的trx觸點接的故障接點在哪,起什麼作用,圖中sa是什麼。

這是一個故障閉合點,出廠是短接狀態,沒有激活,用不上 就不用管他 變頻器嚴工 專來維修 銷售解決變頻各種問題

Ⅵ 腰椎間盤突出已基本康復,可以用TRX懸掛系統訓練嗎

這個問題我可以給您提個建議 你的腰椎突出基本康復了 適當運動有好處但是不能做高難度的牽引運動先不要過多的去運動這樣只會雪上加霜 對了晚上休息時要躺硬些的床墊上

Ⅶ 阿迪達斯 adidas predator absolute trx fg 獵鷹7代有tf版嗎

有的。

Adidas F30 TRX FG的三角釘抓地力強,能保證重心穩。其次,所謂的「PU/人造革」的觸球球感因人而異(PU:聚氨酯)。因為有的人踝部柔韌性極好,能做到整個外腳背的脊部以下部位都觸球,這樣無論是帶球推進還是變向撥拉,基本不會因為球鞋的皮質差異產生誤差。
方形三角釘目前為止好處大於壞處,在橡膠顆粒的人工草上,三角釘的觸地面積大,穩定性好,抵消了橡膠顆粒不均勻帶來的不良感覺;改進的合成皮增加控球的穩定性;加速效率高,三角釘的支撐好了之後,蹬地效果也體現得不錯。

Ⅷ 4.5秒破百的皮卡猛禽也得當弟弟

本文來源於汽車之家車家號作者,不代表汽車之家的觀點立場。

Ⅸ 基本法被告人一一七rdgthht

好處xhfghdzgjfwv獼猴桃

熱點內容
usdt可以綁定銀行卡嗎 發布:2025-01-15 23:35:00 瀏覽:5
比特幣哪個錢包沒被盜過 發布:2025-01-15 23:34:00 瀏覽:696
區塊鏈普及講師 發布:2025-01-15 23:23:21 瀏覽:196
幣圈行情k線圖口訣 發布:2025-01-15 23:14:37 瀏覽:524
區塊鏈技術應用和產業創新發展考試題目 發布:2025-01-15 22:49:38 瀏覽:185
幣圈能不能掙錢 發布:2025-01-15 22:42:25 瀏覽:125
2020年11月6日幣圈簡報 發布:2025-01-15 22:28:28 瀏覽:476
比特幣就是一串符號 發布:2025-01-15 22:18:57 瀏覽:71
挖礦公網私網有區別嗎 發布:2025-01-15 22:18:09 瀏覽:324
萊特幣挖礦教程百度經驗 發布:2025-01-15 22:17:17 瀏覽:534