应元同学说要系统介绍一下THD类。我表示这个类太大,如果只是将字段意义依次列出意义不大,最好是碰到问题将相关的字段再说明,能关联更多信息。最近的一个patch中刚好碰到user_connect(好吧,是误用),就介绍一下。

1、字段说明

THD::user_connect字段是USER_CONN类型,声明在sql/structs.h.其作用是记录当前连接用户的信息。结构如下:

typedef structuser_conn {

char *user;

char *host;

ulonglong reset_utime;

uint connections;

uint conn_per_hour, updates, questions;

USER_RESOURCES user_resources;

} USER_CONN;

可以看到,其中保存了用户名、客户端host信息,还有本用户的更新数、连接数等。

与之配套的,是一个hash结构hash_user_connections,hash_key中包含user和host。因此相同user &host的连接共享同一个USER_CONN.

2、数据源

conn_per_hour, updates, questions是当前连接对应的用户的实时统计信息。user_resources为元数据,来源于表mysql.user.

如:在localhost用root账户登录,update mysql.user set max_updates =2 where user=’root’; flush privileges;(必须flush后才生效)。则此账号最多只能执行2个更新操作(不局限于update)。

3、相关问题

a)hash_user_connections为内存结构,因此统计信息重启后并不保存;

b)如果达到某个统计值达到上限,比如更新数,如何清空?

实际上并没有提供单独清空某个统计值的接口。但在执行flush privileges和flush user_resources时,会将所有的统计值清空。对应被调用的函数为reset_mqh (sql/sql_connect.cc).

/* for FLUSH PRIVILEGES and FLUSH USER_RESOURCES */

for (uint idx=0;idx < hash_user_connections.records; idx++)

{

USER_CONN *uc=(struct user_conn *) hash_element(&hash_user_connections,

idx);

if (get_them)

get_mqh(uc->user,uc->host,uc);

uc->questions=0;

uc->updates=0;

uc->conn_per_hour=0;

}

c)是否所有的连接都会设置user_connect?

实际上,由于mysql.user里面的最后四个字段往往是被设置为默认的0。是否设置user_connect就取决于配置参数max_user_connections。若为0,则该server的所有连接,都不设置user_connect.。估计是MySQL考虑到所有这些值都为0,不需要记录统计信息。实现策略的代码为

if ((ur.questions || ur.updates || ur.conn_per_hour || ur.user_conn ||

max_user_connections) &&

get_or_create_user_conn(thd,

(opt_old_style_user_limits ? thd->main_security_ctx.user :

thd->main_security_ctx.priv_user),

(opt_old_style_user_limits ? thd->main_security_ctx.host_or_ip :

thd->main_security_ctx.priv_host),

&ur))

{

/* The error is set by get_or_create_user_conn(). */

DBUG_RETURN(1);

}

可以看到,如果前面列出的所有值都为0,则不执行函数get_or_create_user_conn。

thd->ser_connect实例在此函数中创建。

4

6

分享到:

2011-01-25 17:59

浏览 2958

分类:数据库

评论

5 楼

hot66hot

2013-03-19

这个必须定, 好东西.

4 楼

GaoYusong

2013-03-13

在google上搜索THD时看到,顶下!

3 楼

Technoboy

2011-05-23

习惯吧,

丁林.tb 写道

这篇踩的人这么多,

我表示鸭梨很大啊

能不能别光踩,说一下原因好改进,善了个哉的

习惯吧,有些人根本不看,直接踩,不是技术爱好者,又何必和他们一般见识呢!

2 楼

gurudk

2011-02-28

可惜我只能顶1个,写的挺好的。

1 楼

丁林.tb

2011-01-26

这篇踩的人这么多,

我表示鸭梨很大啊

能不能别光踩,说一下原因好改进,善了个哉的

mysql thd_MySQL核心类THD介绍之user_connect相关推荐

  1. Spring源码系列- Spring Beans - 核心类的基本介绍

    Spring源码系列- Spring Beans - 核心类的基本介绍 读过上一篇文章的读者应该都能对Spring的体系结构有一个大致的了解,在结尾处,我也说过会从spring-beans包开始分析, ...

  2. mysql源代码解析经典类——THD类

    1.1 线程类THD概述 对于每个客户端连接,我们使用THD作为线程/连接描述符创建一个单独的线程. 1.2 位置 #include <sql_class.h> 嵌套类 //表示只读可连接 ...

  3. mysql thd_MySQL源码阅读3-THD对象

    这里用单独的一篇介绍THD对象,目前看来THD对象是线程处理用户语句请求的核心类.然而该类实在是太大了,单单类的定义就差不多有了3500行.因此,这里不能够完全理解透,所以介绍得也不会全.望谅解- 1 ...

  4. PHP MVC框架核心类

    现在我们举几个核心框架的例子演示:在framework/core下建立一个Framework.class.php的文件.写入以下代码: // framework/core/Framework.clas ...

  5. 深入理解MySQL索引和优化丨MySQL的核心原理

    索引介绍 文章相关视频讲解: C/C++ Linux服务器开发高级架构学习视频点击:C/C++Linux服务器开发/Linux后台架构师-学习视频 理解mysql-索引及其优化 MySQL的核心原理分 ...

  6. java开怎么能不知道Netty几个核心类呢?

    ByteBuf JDK原生ByteBuffer的核心功能 字节缓冲区,主要对字节进行操作的一个类 能够将缓冲区建立在堆内和堆外.普通的new byte[] ,都只是建立在堆内 Netty之所以要自己封 ...

  7. mysql性能的介绍少_MySQL性能突然下降怎么回事 MySQL性能突然下降原因介绍

    MySQL性能突然下降怎么回事?本篇文章小编给大家分享一下MySQL性能突然下降原因介绍,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 有时会碰到这样的情况,一条 SQL ...

  8. MySQL自带工具使用介绍

    MySQL自带工具使用介绍: 1)mysql命令:mysql命令事是使用最多的命令工具了,为用户提供了一个命令行接口来操作管理MySQL的服务器. 命令格式: Usage:mysql [OPTIONS ...

  9. lucene.net 某些类的介绍

    索引中用到的核心类 在Lucene.Net索引开发中,用到的类不多,这些类是索引过程的核心类.其中Analyzer是索引建立的基础,Directory是索引建立中或者建立好存储的介质,Document ...

最新文章

  1. 可视化神经网络的网络结构并保存
  2. B 站 Up 主自制秃头生成器,独秃头不如众秃头?
  3. vector中的圆括号和花括号
  4. Word2013中怎样设置同一文档内粘贴选项
  5. Display Substring
  6. 腾讯云服务器性能测试心得经验总结
  7. 实用网址(平时记下的)
  8. springboot整合dubbo\zookeeper做注册中心
  9. 学习笔记之grub应用
  10. 《SQL Server 2008从入门到精通》--20180703
  11. 解析网页(KMP算法实现部分)
  12. mysql添加外键约束的语法_Mysql添加外键约束.
  13. vue封装element-ui的table组件,灵活配置表头实现表格内编辑,按钮,链接等功能。...
  14. 二分搜索 POJ 1064 Cable master
  15. Verilog——38译码器(包括仿真文件和约束文件的格式)
  16. miui11开发版升级Android10,小米9透明版MIUI11开发版系统刷机包(最新固件系统升级包MIUI11.9.12.31开发版安卓10)...
  17. Django的多应用分布式路由
  18. vss问题:客户端提示Sourcesafe cannot find a default database.Would you like to select one?
  19. Windows11台式机连接Type-C触摸屏显示器
  20. JavaScript检测邮箱 e-mail

热门文章

  1. NCC自定义参照开发
  2. python3.x简单爬虫(爬取百度壁纸图片下载本地)
  3. 自动驾驶车辆转角补偿控制器
  4. Java的comparator接口中compare方法比较原理
  5. 计算机考试应该注意些什么问题,全国计算机二级C考试要注意哪些问题?
  6. MCU--新塘N76E003--IIC
  7. 关于vue-router的历史模式和hash模式
  8. Win32下Foxbase+数据库浏览程序的编写 (转)
  9. 有限元FEM求解一维电磁场问题 Rits法 Galerkin法
  10. android 图片比例计算器,Algeo图形计算器