mysql thd_MySQL核心类THD介绍之user_connect
应元同学说要系统介绍一下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相关推荐
- Spring源码系列- Spring Beans - 核心类的基本介绍
Spring源码系列- Spring Beans - 核心类的基本介绍 读过上一篇文章的读者应该都能对Spring的体系结构有一个大致的了解,在结尾处,我也说过会从spring-beans包开始分析, ...
- mysql源代码解析经典类——THD类
1.1 线程类THD概述 对于每个客户端连接,我们使用THD作为线程/连接描述符创建一个单独的线程. 1.2 位置 #include <sql_class.h> 嵌套类 //表示只读可连接 ...
- mysql thd_MySQL源码阅读3-THD对象
这里用单独的一篇介绍THD对象,目前看来THD对象是线程处理用户语句请求的核心类.然而该类实在是太大了,单单类的定义就差不多有了3500行.因此,这里不能够完全理解透,所以介绍得也不会全.望谅解- 1 ...
- PHP MVC框架核心类
现在我们举几个核心框架的例子演示:在framework/core下建立一个Framework.class.php的文件.写入以下代码: // framework/core/Framework.clas ...
- 深入理解MySQL索引和优化丨MySQL的核心原理
索引介绍 文章相关视频讲解: C/C++ Linux服务器开发高级架构学习视频点击:C/C++Linux服务器开发/Linux后台架构师-学习视频 理解mysql-索引及其优化 MySQL的核心原理分 ...
- java开怎么能不知道Netty几个核心类呢?
ByteBuf JDK原生ByteBuffer的核心功能 字节缓冲区,主要对字节进行操作的一个类 能够将缓冲区建立在堆内和堆外.普通的new byte[] ,都只是建立在堆内 Netty之所以要自己封 ...
- mysql性能的介绍少_MySQL性能突然下降怎么回事 MySQL性能突然下降原因介绍
MySQL性能突然下降怎么回事?本篇文章小编给大家分享一下MySQL性能突然下降原因介绍,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 有时会碰到这样的情况,一条 SQL ...
- MySQL自带工具使用介绍
MySQL自带工具使用介绍: 1)mysql命令:mysql命令事是使用最多的命令工具了,为用户提供了一个命令行接口来操作管理MySQL的服务器. 命令格式: Usage:mysql [OPTIONS ...
- lucene.net 某些类的介绍
索引中用到的核心类 在Lucene.Net索引开发中,用到的类不多,这些类是索引过程的核心类.其中Analyzer是索引建立的基础,Directory是索引建立中或者建立好存储的介质,Document ...
最新文章
- 可视化神经网络的网络结构并保存
- B 站 Up 主自制秃头生成器,独秃头不如众秃头?
- vector中的圆括号和花括号
- Word2013中怎样设置同一文档内粘贴选项
- Display Substring
- 腾讯云服务器性能测试心得经验总结
- 实用网址(平时记下的)
- springboot整合dubbo\zookeeper做注册中心
- 学习笔记之grub应用
- 《SQL Server 2008从入门到精通》--20180703
- 解析网页(KMP算法实现部分)
- mysql添加外键约束的语法_Mysql添加外键约束.
- vue封装element-ui的table组件,灵活配置表头实现表格内编辑,按钮,链接等功能。...
- 二分搜索 POJ 1064 Cable master
- Verilog——38译码器(包括仿真文件和约束文件的格式)
- miui11开发版升级Android10,小米9透明版MIUI11开发版系统刷机包(最新固件系统升级包MIUI11.9.12.31开发版安卓10)...
- Django的多应用分布式路由
- vss问题:客户端提示Sourcesafe cannot find a default database.Would you like to select one?
- Windows11台式机连接Type-C触摸屏显示器
- JavaScript检测邮箱 e-mail