<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MySQL &#8211; HU Xiaoxu</title>
	<atom:link href="https://blog.ihuxu.com/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.ihuxu.com</link>
	<description>a software engineer&#039;s blog</description>
	<lastBuildDate>Wed, 18 Jun 2025 15:29:31 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.2</generator>
	<item>
		<title>小型网站架构降 Apache 与 MySQL 内存占用比率</title>
		<link>https://blog.ihuxu.com/how-to-configure-the-apache-and-mysql-server-effectively-under-the-framework-of-a-small-web-site/</link>
					<comments>https://blog.ihuxu.com/how-to-configure-the-apache-and-mysql-server-effectively-under-the-framework-of-a-small-web-site/#respond</comments>
		
		<dc:creator><![CDATA[HU Xiaoxu]]></dc:creator>
		<pubDate>Tue, 13 Dec 2016 11:38:12 +0000</pubDate>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Dev Problem]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Memory]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Original]]></category>
		<guid isPermaLink="false">http://www.ihuxu.com/blog/?p=9365</guid>

					<description><![CDATA[前言 这篇文章以我的阿里云服务器为例（你眼前的博客正是搭在这个服务器上），阐述下小型网站（Linux+Apache+MySQL+PHP）对于内存利用率提升的配置方法的一个点。 正文 我的服务器是阿里云的，在一年前由于数据库（MySQL）频繁内存不足宕机就“潇洒”地升级了配置到2G内存。所以，目前机器的配置如下： CPU： 1核 内存： 2048 MB 操作系统： CentOS 6.5 32位 公网IP： 115.28.36.19 带宽计费方式： 按固定带宽 当前使用带宽： 1Mbps 同时，正常使用情况下的内存使用情况如下： 图中显示 MySQL 占用 440m，Apache 占用 44m。当然，这是MySQL 服务和 Apache 服务刚刚重启后的情况。实际的内存占用会比这大，因为随着业务的进行，会进行 Cache 的累积，最后导致整体的使用内存增大。 下面分别调整 MySQL 和 Apache 的配置文件。 MySQL 修改 /etc/my.cnf 文件，增加如下配置内容： 内容使用情况如下： 如图所示，在修改 MySQL 配置项后内存使用已经大幅度下降到 71m 了。所以，默认的 MySQL 配置真是不适合我们这种小型网站。同时，你会注意到运行了一段时间后，Apache 内存占比上升，使用量达到406m。真是可怕。 下面我们修改 Apache 的配置文件，httpd.conf： 由于我的 Apache 加载的是 event 模式，所以我这里修改了相应的 event 模块配置。如果你想知道你自己加载的是哪种模式，每一个配置项是什么意思，那么你可以参阅下这篇文章：apache2.4.x 三种 MPM 介绍。 修改后配置重启就 OK 了。 总结 没有总结]]></description>
		
					<wfw:commentRss>https://blog.ihuxu.com/how-to-configure-the-apache-and-mysql-server-effectively-under-the-framework-of-a-small-web-site/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>深入 MySQL 用户自定义变量：使用详解及其使用场景案例</title>
		<link>https://blog.ihuxu.com/explaination-of-the-mysql-variables-usage-and-the-use-case/</link>
					<comments>https://blog.ihuxu.com/explaination-of-the-mysql-variables-usage-and-the-use-case/#comments</comments>
		
		<dc:creator><![CDATA[HU Xiaoxu]]></dc:creator>
		<pubDate>Tue, 04 Oct 2016 02:21:09 +0000</pubDate>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Original]]></category>
		<guid isPermaLink="false">http://www.ihuxu.com/blog/?p=5879</guid>

					<description><![CDATA[一、前言 在前段工作中，曾几次收到超级话题积分漏记的用户反馈。通过源码的阅读分析后，发现问题出在高并发分布式场景下的计数器上。计数器的值会影响用户当前行为所获得积分的大小。比如，当用户在某超级话题下连续第 n（n 即计数器的值）次进行转发帖子时，将会获得与 n 相关的分数。然而，在第一次改进后问题依然存在。所以，这次在之前的基础上，通过使用 MySQL 变量的途径来解决该问题。 二、到底 MySQL 的变量分哪几类？ MySQL变量一共分为两大类：用户自定义变量和系统变量。如下： 本文涉及的内容为用户自定义会话变量，若对其他分类无感，请点击这里。 PS：用户定义的会话变量和系统定义的会话变量有什么区别？ 局部变量 局部变量一般用于 SQL 的语句块中，比如存储过程中的 begin 和 end 语句块。其作用域仅限于该语句块内。生命周期也仅限于该存储过程的调用期间。 上述存储过程中定义的变量 c 就是局部变量。 会话变量 会话变量即为服务器为每个客户端连接维护的变量。在客户端连接时，使用相应全局变量的当前值对客户端的回话变量进行初始化。设置会话变量不需要特殊权限，但客户端只能更改自己的会话变量。其作用域与生命周期均限于当前客户端连接。 会话变量的赋值： 会话变量的查询： 全局变量 全局变量影响服务器整体操作。当服务器启动时，它将所有全局变量初始化为默认值。这些默认值可以在选项文件中或在命令行中指定的选项进行更改。要想更改全局变量，必须具有 SUPER 权限。全局变量作用于 server 的整个生命周期，但是不能跨重启。即重启后所有设置的全局变量均失效。要想让全局变量重启后继续生效，需要更改相应的配置文件。 全局变量的设置： 全局变量的查询： 三、MySQL用户自定义变量详解 你可以利用 SQL 语句将值存储在用户自定义变量中，然后再利用另一条 SQL 语句来查询用户自定义变量。这样以来，可以再不同的 SQL 间传递值。 用户自定义变量的声明方法形如：@var_name，其中变量名称由字母、数字、“.”、“_”和“$”组成。当然，在以字符串或者标识符引用时也可以包含其他字符（例如：@&#8217;my-var&#8217;，@&#8221;my-var&#8221;，或者@`my-var`）。 用户自定义变量是会话级别的变量。其变量的作用域仅限于声明其的客户端链接。当这个客户端断开时，其所有的会话变量将会被释放。 用户自定义变量是不区分大小写的。 使用 SET 语句来声明用户自定义变量： 在使用 SET 设置变量时，可以使用“=”或者“:=”操作符进行赋值。 当然，除了 SET 语句还有其他赋值的方式。比如下面这个例子，但是赋值操作符只能使用“:=”。因为“=”操作符将会被认为是比较操作符。 mysql&#62; SET @t1=1, @t2=2, @t3:=4; mysql&#62; SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3;<div class="read-more"><a class="btn read-more-btn" href="https://blog.ihuxu.com/explaination-of-the-mysql-variables-usage-and-the-use-case/">Read More</a></div>]]></description>
		
					<wfw:commentRss>https://blog.ihuxu.com/explaination-of-the-mysql-variables-usage-and-the-use-case/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>高并发、分布式数据库场景下需要注意的 UPDATE SQL 写法</title>
		<link>https://blog.ihuxu.com/the-problem-of-the-distribution-mysql-to-be-focused-in-the-hight-concurent-request/</link>
					<comments>https://blog.ihuxu.com/the-problem-of-the-distribution-mysql-to-be-focused-in-the-hight-concurent-request/#respond</comments>
		
		<dc:creator><![CDATA[HU Xiaoxu]]></dc:creator>
		<pubDate>Tue, 09 Aug 2016 05:45:26 +0000</pubDate>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Original]]></category>
		<guid isPermaLink="false">http://www.ihuxu.com/blog/?p=968</guid>

					<description><![CDATA[业务模块 超级话题签到积分 具体场景 更新签到积分行为 表 integration_record &#8211; 每次产生积分行为的记录表。即每当用户产生积分行为（如：在超级话题内进行签到、转发和回复等行为），就会增加一条 integration_record 表的记录。表明该用户在该超级话题下通过哪些行为产生了多少积分增量。 integration &#8211; 每个用户的总积分表。即在每次写入一条 integration_record 记录后，会将积分增量累计加入到该表的总积分字段中。表明目前为止，该用户在该超级话题下通过积分行为一共获取的积分总数。 表的细节就不给出了（也没必要）。这两张表都以话题 ID（topic_id）和用户 ID（uid_id）进行联合索引。 具体问题 在某些情况下，某个用户所在某个话题下的所有 integration_record 记录的积分总和小于该用户在该话题下的 integration 表记录的总积分。 异常日志 通过检查线上异常日志发现，会偶发出现更新 integration 表记录返回0（更新影响记录行数为 0）的情况。但理论上不应该出现这种情况。 分析 进而考虑是由于数据库主从同步的延迟导致。为什么这么猜测？看下面SQL： update integration&#160;set integration = ? where topic_id = ? and uid = ? 上面为改动前（有问题）的 SQL。其中第一个问号代表当前需要更新的积分总数。问题就出现在这个总数上。 这个总数是由当前用户产生的积分行为所增加分数与当前 integration 表中该用户的积分总数（读于从库）之和。 所以，在高并发的请求下，会出现同时待同步如下一些SQL： update integration&#160;set integration = 1720 where topic_id = abc and uid = 12345678 update integration&#160;set integration = 1720 where topic_id<div class="read-more"><a class="btn read-more-btn" href="https://blog.ihuxu.com/the-problem-of-the-distribution-mysql-to-be-focused-in-the-hight-concurent-request/">Read More</a></div>]]></description>
		
					<wfw:commentRss>https://blog.ihuxu.com/the-problem-of-the-distribution-mysql-to-be-focused-in-the-hight-concurent-request/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
