1、原题
1.1、英文原题

You want to use the Performance Schema to get the equivalent of SHOW FULL PROCESSLIST.Which three statements are true?
A. The events_statements_current consumer must be enabled.
B. The PROCESS privilege is required.
C. The sys.session view provides the process list with additional information.
D. The threads table contains all the required columns.
E. A connection must be instrumented to be included in the list of processes.
F. The performance impact is less than SHOW FULL PROCESSLIST.
1.2、中文翻译
您希望使用性能模式来获得SHOW FULL PROCESSLIST的等价内容,哪三个陈述是正确的?
A. 必须启用events_statements_current consumer。
B. 需要PROCESS权限。
C. sys.session视图为进程列表提供了附加信息。
D. 线程表包含所有必需的列。
E. 必须对连接进行仪器化,以便将其包含在进程列表中。
F. 性能影响小于SHOW FULL PROCESSLIST。
1.3、答案
D、E、F
2、题目解析
2.1、题干解析
本题考察性能模式相关的知识。
2.2、选项解析
2.2.1、选项A解析
events_statements_current表包含当前正在执行的语句,而不是线程,所以和SHOW FULL PROCESSLIST没有直接关系。所以选项A错误。
2.2.2、选项B解析
如果有PROCESS权限,用户可以看到所有的线程,包括属于其他用户的线程。如果没有PROCESS权限,非匿名用户可以看到自己的线程信息,但不能看到其他用户的线程。所以PROCESS权限并不是使用性能模式必须的,也不是使用SHOW FULL PROCESSLIST语句必须的。所以选项B错误。
2.2.3、选项C解析
sys. session视图与processlist相似,但是session视图过滤掉了后台进程,只显示用户会话。所以选项C错误。
3、知识点
3.1、知识点1:processlist表
MySQL的processlist(进程列表)表明当前正在由服务器内执行的线程组。对于新安装的MySQL 5.7.39或更高版本,processlist表会在性能模式中自动创建。processlist表有如下列:
- ID:连接标识符,对于Performance Schema的线程(threads)表中的PROCESSLIST_ID列中。
- USER:发出该语句的MySQL用户。
- 如果值为system,代表是由服务器生成的处理内部任务的非客户线程,例如,延迟行处理程序线程或复制主机上使用的I/O或SQL线程。对于system,在Host列中没有指定主机。
- unauthenticated user指的是一个与客户连接相关的线程,但是客户用户的认证还没有发生。
- event_scheduler指的是监视计划事件的线程。
- HOST:发出语句的客户端的主机名(system用户除外,它没有主机)。TCP/IP连接的主机名以host_name:client_port格式报告,以方便确定哪个客户在做什么。
- DB:该线程的默认数据库,如果没有选择,则为空。
- COMMAND:线程代表客户执行的命令的类型,如果会话是空闲的,则为Sleep。
- TIME:线程处于当前状态的时间,单位是秒。对于一个复制的SQL线程,该值是最后一个复制事件的时间戳和复制主机的实际时间之间的秒数。
- STATE:表示线程正在做什么的一个动作、事件或状态。
- INFO:线程正在执行的语句,如果它没有执行任何语句,则为NULL。该语句可能是发送到服务器的语句,或者是最内层的语句,如果该语句执行其他语句。例如,如果一个CALL语句执行一个正在执行SELECT语句的存储过程,INFO值显示SELECT语句。
默认的SHOW PROCESSLIST实现从线程管理器中遍历活动线程,同时持有一个全局互斥。这对性能有负面影响,特别是在繁忙的系统上。另一种SHOW PROCESSLIST实现是基于Performance Schema processlist表的。这个实现从Performance Schema而不是线程管理器中查询活动线程数据,并且不需要互斥。
3.2、知识点2:SHOW PROCESSLIST语句
SHOW PROCESSLIST语句能够显示MySQL进程列表,表明当前正在由服务器内执行的线程集执行的操作。
- 如果你有PROCESS权限,你可以看到所有的线程,甚至那些属于其他用户的线程。否则(没有PROCESS权限),非匿名用户可以看到自己的线程信息,但不能看到其他用户的线程,而匿名用户不能看到线程信息。
- 如果没有FULL关键字,SHOW PROCESSLIST在INFO字段中只显示每个语句的前100个字符。
- 如果你得到 "too many connections "的错误信息并想知道发生了什么,SHOW PROCESSLIST语句非常有用。MySQL保留了一个额外的连接,由拥有SUPER权限的账户使用,以确保管理员应该总是能够连接和检查系统。线程可以用KILL语句杀死。
3.3、知识点3:events_statements_current表
events_statements_current表包含当前的语句事件。该表每个线程存储一行,显示线程最近监测的语句事件的当前状态。在包含语句事件行的表中,events_statements_current是最基本的。其他包含语句事件行的表在逻辑上是由当前事件派生的。例如,events_statements_history和events_statements_history_long表是最近结束的语句事件的集合,分别达到了每个线程和全局所有线程的最大行数。
对于等待、阶段、语句和事务事件,性能模式可以监控和存储当前的事件。此外,当事件结束时,性能模式可以将它们存储在历史表中。对于每个事件类型,性能模式使用三个表来存储当前和历史事件。这些表有以下形式的名称,其中xxx表示事件类型(等待、

文章介绍了如何使用MySQL的PerformanceSchema获取类似SHOWFULLPROCESSLIST的信息,分析了启用不同选项和权限的需求,强调了threads表在获取进程列表中的作用,并讨论了sys模式下的视图。实验部分验证了threads表包含所需信息以及查询PerformanceSchema的权限要求。
最低0.47元/天 解锁文章
1882

被折叠的 条评论
为什么被折叠?



