MariaDB 10.3 查询优化之profile

MariaDB [(none)]> select version();
+--------------------+
| version()          |
+--------------------+
| 10.3.8-MariaDB-log |
+--------------------+
1 row in set (0.015 sec)
profile功能默认是关闭需要通过session设置,此参数是会话级别的。
--查看profiling系统变量
MariaDB [sbtest]> show variables like '%profil%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| have_profiling         | YES   |
| profiling              | OFF   |
| profiling_history_size | 15    |
+------------------------+-------+
3 rows in set (0.002 sec)

have_profiling:只读变量,用于控制是否由系统变量开启或禁用profiling
profiling:开启SQL语句剖析功能
profiling_history_size:设置保留profiling的数目,缺省为15,范围为0至100,为0时将禁用profiling
--获取帮助信息:
MariaDB [sbtest]> help show profile
Name: 'SHOW PROFILE'
Description:
Syntax:
SHOW PROFILE [type [, type] ... ]
    [FOR QUERY n]
    [LIMIT row_count [OFFSET offset]]

type:
    ALL                --显示所有的开销信息
  | BLOCK IO           --显示块IO相关开销
  | CONTEXT SWITCHES   --上下文切换相关开销
  | CPU                --显示CPU相关开销信息
  | IPC                --显示发送和接收相关开销信息
  | MEMORY             --显示内存相关开销信息
  | PAGE FAULTS        --显示页面错误相关开销信息
  | SOURCE             --显示和Source_function,Source_file,Source_line相关的开销信息
  | SWAPS              --显示交换次数相关开销的信息 
也可以通过查询information_schema.PROFILING查询相关信息:
MariaDB [sbtest]> desc INFORMATION_SCHEMA.PROFILING;
+---------------------+--------------+------+-----+----------+-------+
| Field               | Type         | Null | Key | Default  | Extra |
+---------------------+--------------+------+-----+----------+-------+
| QUERY_ID            | int(20)      | NO   |     | 0        |       |
| SEQ                 | int(20)      | NO   |     | 0        |       |
| STATE               | varchar(30)  | NO   |     |          |       |
| DURATION            | decimal(9,6) | NO   |     | 0.000000 |       |
| CPU_USER            | decimal(9,6) | YES  |     | NULL     |       |
| CPU_SYSTEM          | decimal(9,6) | YES  |     | NULL     |       |
| CONTEXT_VOLUNTARY   | int(20)      | YES  |     | NULL     |       |
| CONTEXT_INVOLUNTARY | int(20)      | YES  |     | NULL     |       |
| BLOCK_OPS_IN        | int(20)      | YES  |     | NULL     |       |
| BLOCK_OPS_OUT       | int(20)      | YES  |     | NULL     |       |
| MESSAGES_SENT       | int(20)      | YES  |     | NULL     |       |
| MESSAGES_RECEIVED   | int(20)      | YES  |     | NULL     |       |
| PAGE_FAULTS_MAJOR   | int(20)      | YES  |     | NULL     |       |
| PAGE_FAULTS_MINOR   | int(20)      | YES  |     | NULL     |       |
| SWAPS               | int(20)      | YES  |     | NULL     |       |
| SOURCE_FUNCTION     | varchar(30)  | YES  |     | NULL     |       |
| SOURCE_FILE         | varchar(20)  | YES  |     | NULL     |       |
| SOURCE_LINE         | int(20)      | YES  |     | NULL     |       |
+---------------------+--------------+------+-----+----------+-------+
18 rows in set (0.002 sec)

MariaDB [sbtest]> SELECT @@profiling;
+-------------+
| @@profiling |
+-------------+
|           0 |
+-------------+
1 row in set (0.000 sec)
--开启profile:
MariaDB [sbtest]> set session profiling = 1;      
Query OK, 0 rows affected (0.000 sec)

MariaDB [sbtest]> SELECT @@profiling;       
+-------------+
| @@profiling |
+-------------+
|           1 |
+-------------+
1 row in set (0.000 sec)


MariaDB [sbtest]> select count(1) from sbtest1 ;
+-----------+
| count(1)  |
+-----------+
| 100000000 |
+-----------+
1 row in set (4 min 49.209 sec)

MariaDB [sbtest]> show profiles;
+----------+--------------+--------------------------------------+
| Query_ID | Duration     | Query                                |
+----------+--------------+--------------------------------------+
|        1 |   0.00032802 | SELECT @@profiling                   |
|        2 |   0.00100349 | show tables                          |
|        3 | 289.20878779 | select count(1) from sbtest1         |
+----------+--------------+--------------------------------------+
3 rows in set (0.001 sec)

通过查询ID(query_id)查看每个操作具体的资源消耗:
MariaDB [sbtest]> show profile for query 3;
+------------------------+------------+
| Status                 | Duration   |
+------------------------+------------+
| Starting               |   0.000131 |
| Checking permissions   |   0.000022 |
| Opening tables         |   0.000134 |
| After opening tables   |   0.000014 |
| System lock            |   0.000010 |
| Table lock             |   0.000017 |
| Init                   |   0.000032 |
| Optimizing             |   0.000046 |
| Statistics             |   0.000032 |
| Preparing              |   0.000041 |
| Executing              |   0.000011 |
| Sending data           | 289.208012 |
| End of update loop     |   0.000035 |
| Query end              |   0.000009 |
| Commit                 |   0.000026 |
| Closing tables         |   0.000010 |
| Unlocking tables       |   0.000007 |
| Closing tables         |   0.000043 |
| Starting cleanup       |   0.000009 |
| Freeing items          |   0.000013 |
| Updating status        |   0.000033 |
| Logging slow query     |   0.000091 |
| Reset for next command |   0.000009 |
+------------------------+------------+
23 rows in set (0.071 sec)
通过上面的查询可以看到第三个查询语句的资源消耗时间在哪里。

通过下面的语句可以查看CPU、内存等资源的消耗:
MariaDB [sbtest]> show profile cpu,block io,memory,swaps,context switches,source for query 3;
+------------------------+------------+-----------+------------+-------------------+---------------------+--------------+---------------+-------+-----------------+---------------+-------------+
| Status                 | Duration   | CPU_user  | CPU_system | Context_voluntary | Context_involuntary | Block_ops_in | Block_ops_out | Swaps | Source_function | Source_file   | Source_line |
+------------------------+------------+-----------+------------+-------------------+---------------------+--------------+---------------+-------+-----------------+---------------+-------------+
| Starting               |   0.000131 |  0.000110 |   0.000011 |                 0 |                   0 |            0 |             0 |     0 | NULL            | NULL          |        NULL |
| Checking permissions   |   0.000022 |  0.000024 |   0.000002 |                 0 |                   0 |            0 |             0 |     0 | <unknown>       | sql_parse.cc  |        6754 |
| Opening tables         |   0.000134 |  0.000000 |   0.000128 |                 0 |                   0 |            0 |             0 |     0 | <unknown>       | sql_base.cc   |        3998 |
| After opening tables   |   0.000014 |  0.000000 |   0.000012 |                 0 |                   0 |            0 |             0 |     0 | <unknown>       | sql_base.cc   |        4245 |
| System lock            |   0.000010 |  0.000000 |   0.000011 |                 0 |                   0 |            0 |             0 |     0 | <unknown>       | lock.cc       |         340 |
| Table lock             |   0.000017 |  0.000000 |   0.000017 |                 0 |                   0 |            0 |             0 |     0 | <unknown>       | lock.cc       |         345 |
| Init                   |   0.000032 |  0.000000 |   0.000033 |                 0 |                   0 |            0 |             0 |     0 | <unknown>       | sql_select.cc |        4196 |
| Optimizing             |   0.000046 |  0.000000 |   0.000046 |                 0 |                   0 |            0 |             0 |     0 | <unknown>       | sql_select.cc |        1512 |
| Statistics             |   0.000032 |  0.000000 |   0.000032 |                 0 |                   0 |            0 |             0 |     0 | <unknown>       | sql_select.cc |        1879 |
| Preparing              |   0.000041 |  0.000000 |   0.000041 |                 0 |                   0 |            0 |             0 |     0 | <unknown>       | sql_select.cc |        1951 |
| Executing              |   0.000011 |  0.000000 |   0.000011 |                 0 |                   0 |            0 |             0 |     0 | <unknown>       | sql_select.cc |        3833 |
| Sending data           | 289.208012 | 62.238655 |   6.767475 |            100008 |                  53 |      2974248 |            80 |     0 | <unknown>       | sql_select.cc |        4015 |
| End of update loop     |   0.000035 |  0.000020 |   0.000002 |                 0 |                   0 |            0 |             0 |     0 | <unknown>       | sql_select.cc |        4231 |
| Query end              |   0.000009 |  0.000008 |   0.000000 |                 0 |                   0 |            0 |             0 |     0 | <unknown>       | sql_parse.cc  |        6290 |
| Commit                 |   0.000026 |  0.000024 |   0.000003 |                 0 |                   0 |            0 |             0 |     0 | <unknown>       | sql_parse.cc  |        6352 |
| Closing tables         |   0.000010 |  0.000009 |   0.000000 |                 0 |                   0 |            0 |             0 |     0 | <unknown>       | sql_base.cc   |         718 |
| Unlocking tables       |   0.000007 |  0.000006 |   0.000001 |                 0 |                   0 |            0 |             0 |     0 | <unknown>       | lock.cc       |         431 |
| Closing tables         |   0.000043 |  0.000040 |   0.000004 |                 0 |                   0 |            0 |             0 |     0 | <unknown>       | lock.cc       |         444 |
| Starting cleanup       |   0.000009 |  0.000008 |   0.000000 |                 0 |                   0 |            0 |             0 |     0 | <unknown>       | sql_parse.cc  |        6424 |
| Freeing items          |   0.000013 |  0.000012 |   0.000001 |                 0 |                   0 |            0 |             0 |     0 | <unknown>       | sql_parse.cc  |        8090 |
| Updating status        |   0.000033 |  0.000030 |   0.000003 |                 0 |                   0 |            0 |             0 |     0 | <unknown>       | sql_parse.cc  |        2398 |
| Logging slow query     |   0.000091 |  0.000083 |   0.000008 |                 0 |                   0 |            0 |             8 |     0 | <unknown>       | sql_parse.cc  |        2510 |
| Reset for next command |   0.000009 |  0.000008 |   0.000001 |                 0 |                   0 |            0 |             0 |     0 | <unknown>       | sql_parse.cc  |        2422 |
+------------------------+------------+-----------+------------+-------------------+---------------------+--------------+---------------+-------+-----------------+---------------+-------------+
23 rows in set (0.001 sec)

profile是分析SQL语句的利器。

 

### 关于MariaDB 10.3 的版本特性 MariaDB 10.3 提供了一系列增强功能和改进,旨在提升性能、安全性及易用性。该版本引入了窗口函数的支持,使得复杂查询更加简洁高效[^1]。 #### 安装配置指南 对于Windows环境下的安装过程,官方提供了图形化向导工具简化部署流程。用户可以选择不同的组件和服务进行定制化安装,同时提供详细的日志记录帮助排查潜在问题。 - **初始设置**:启动安装程序后会引导完成基本参数设定,如root密码定义等。 - **服务管理**:允许将数据库引擎注册为操作系统的服务项以便自动启动。 - **网络配置**:默认监听TCP/IP端口`3306`用于远程连接访问[^4]。 #### 使用文档资源链接 为了方便开发者和技术人员深入了解并充分利用这些新特性,建议查阅官方发布的最新版次的手册: - [MariaDB官方网站](https://mariadb.org/) - 获取最权威的第一手资料。 - [官方Wiki页面](https://mariadb.com/kb/en/library/documentation-wiki/) - 包含丰富的教程文章和技术说明。 #### 下载地址 可以从[MariaDB下载中心](https://downloads.mariadb.org/mariadb/10.3/)找到适用于不同平台(包括但不限于Linux, macOS 和 Windows)的二进制分发包。确保选择适合目标系统的稳定发行版本以获得最佳体验和支持保障。 ```bash wget https://downloads.mariadb.org/f/mariadb-10.3.12/winx64-packages/mariadb-10.3.12-win_x64.zip unzip mariadb-10.3.12-win_x64.zip ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值