中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mysql Innodb中的Linux native異步I/O分析

發布時間:2021-11-15 13:38:30 來源:億速云 閱讀:182 作者:iii 欄目:MySQL數據庫

本篇內容主要講解“Mysql Innodb中的Linux native異步I/O分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Mysql Innodb中的Linux native異步I/O分析”吧!

一、前言

在5.7中Innodb異步I/O的內存結構發生了一些變化特別是異步I/O數組和以前的結構體不同變為了類叫做AIO類但是換湯不換藥只是將一些方法進行了封裝,而異步i/o實際的請求放到了Slot結構體它們分別對應了5.6 os_aio_array_t和os_aio_slot_t。

二、幾個基本概念

  • MYSQL中的異步I/O線程
    我以前一直搞不清楚這幾個線程的作用,為了搞清楚這個我才決定好好學習一下異步I/O
    如下面的參數設置

mysql> show variables like '%io_threads%';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| innodb_read_io_threads  | 2     |
| innodb_write_io_threads | 2     |
+-------------------------+-------+

我在本數據中實際設置了2個read 異步i/o線程和2個write異步I/O線程此外都包含一個log和ibuf異步I/O線程在數據庫中我們也可以查詢到這6個異步I/O線程

mysql> select a.thd_id,b.THREAD_OS_ID,a.user ,a.conn_id,b.TYPE,a.source,a.program_name from sys.processlist a,performance_schema.threads b where b.thread_id=a.thd_id and  user  like '%io%';
+--------+--------------+------------------------+---------+------------+--------------------+--------------+
| thd_id | THREAD_OS_ID | user                   | conn_id | TYPE       | source             | program_name |
+--------+--------------+------------------------+---------+------------+--------------------+--------------+
|      3 |        14059 | innodb/io_ibuf_thread  |    NULL | BACKGROUND | NULL               | NULL         |
|      4 |        14060 | innodb/io_log_thread   |    NULL | BACKGROUND | sync0debug.cc:1296 | NULL         |
|      5 |        14061 | innodb/io_read_thread  |    NULL | BACKGROUND | NULL               | NULL         |
|      6 |        14062 | innodb/io_read_thread  |    NULL | BACKGROUND | NULL               | NULL         |
|      7 |        14063 | innodb/io_write_thread |    NULL | BACKGROUND | sync0debug.cc:1296 | NULL         |
|      8 |        14064 | innodb/io_write_thread |    NULL | BACKGROUND | NULL               | NULL         |
+--------+--------------+------------------------+---------+------------+--------------------+--------------+
  • AIO類、線程、Slot的關系

首先一個AIO類對應了一個類型的異步,比如ibuf/log/read/write都對應一個AIO類,并且在類的最后用一個類的靜態全局成員進行指向如下:

 /** Insert buffer */
   static AIO*     s_ibuf;
   /** Redo log */
   static AIO*     s_log;
   /** Reads */
   static AIO*     s_reads;
   /** Writes */
   static AIO*     s_writes;

而我們的異步I/O線程實際上有6個也就是s_reads包含了2個線程/s_writes包含了2個線程,那么線程引入了一個叫做local segment的概念,實際上每一個線程對應了一個local segment,而在AIO下面掛的就是一個Slot的vertor數組,數組的大小和每種類型的線程個數(local segment)和每個線程最大的Slot有關,看源碼中對最大的Slot的定義如下:

8 * OS_AIO_N_PENDING_IOS_PER_THREAD

其中宏定義OS_AIO_N_PENDING_IOS_PER_THREAD=32

那么對于s_ibuf和s_log因為只有一個線程(local segment)那么就有256個Slot,而s_reads和s_writes當前我的數據庫各有2個線程(local segment)那么就有2*256=512個Slot.

  • global segment
    這個概念主要和模擬的異步I/O有關,如果我當前有6個異步I/O線程那么global segment就是6,因為在進行初始化調用AIO::start的時候其編號總是固定的及0和1對應了然后是read和write線程個數,那么由global segment到local segment的換算也變得簡單了可以參考AIO::get_segment_no_from_slot.

如果沒有顯示指定本文所有segment均指local segment

三、內存結構的初始化

整個內存結構的初始化是從由innobase_start_or_create_for_mysql調用的下面代碼開始的如下:

Mysql Innodb中的Linux native異步I/O分析

到此,相信大家對“Mysql Innodb中的Linux native異步I/O分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

濮阳市| 光泽县| 克什克腾旗| 施甸县| 滨州市| 尚义县| 舞钢市| 咸宁市| 稻城县| 武川县| 大田县| 湛江市| 张家川| 临猗县| 临桂县| 呈贡县| 勐海县| 江安县| 张家界市| 大厂| 武隆县| 铜梁县| 四平市| 连山| 马边| 仁布县| 曲阜市| 广河县| 浦北县| 井陉县| 平昌县| 宁波市| 云龙县| 通州市| 灵川县| 沙雅县| 通许县| 盈江县| 常山县| 合山市| 视频|