<?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>AnySQL.net &#187; Memory</title>
	<atom:link href="http://www.anysql.net/tag/memory/feed" rel="self" type="application/rss+xml" />
	<link>http://www.anysql.net</link>
	<description>SQLULDR2, DataCopy, DataSync, WebChart, OraMon, AUL/MyDUL, 性能优化及容量分析</description>
	<lastBuildDate>Wed, 14 Jul 2010 09:27:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>该死的Java Full GC</title>
		<link>http://www.anysql.net/developer/java_free_memory.html</link>
		<comments>http://www.anysql.net/developer/java_free_memory.html#comments</comments>
		<pubDate>Wed, 04 Mar 2009 17:23:35 +0000</pubDate>
		<dc:creator>anysql</dc:creator>
				<category><![CDATA[Developer]]></category>
		<category><![CDATA[Free]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Memory]]></category>

		<guid isPermaLink="false">http://www.anysql.net/wordpress/uncategorized/%e8%af%a5%e6%ad%bb%e7%9a%84java-full-gc.html</guid>
		<description><![CDATA[&#160; &#160; 某一天, 在oramon的监控日志中, 突然看到数据库的事务数和日志生成量出现下跌的情况, 持续时间长达30秒, 这个原因得好好查查. 在oramon的Active SQL日志中发现了大量的锁等待, 被等待的语句发生在两个相对比较忙的表中. www.AnySQL.net Cmmt Redo 02/xx-13:03:04&#160; 13K&#160; 39M 02/xx-13:03:14 3389&#160; 9M 02/xx-13:03:24 3597&#160; 8M 02/xx-13:03:34 5500&#160; 17M 02/xx-13:03:44&#160; 15K&#160; 54M 02/xx-13:03:54&#160; 15K&#160; 43M &#160; &#160; 锁等待一般要请应用开发人员协助分析了, 分析了应用服务器端日志后, 基本确定是因为有几台应用服务器在那个时间点做了比较多的Full GC, 当用优化的GC算法失效时, Java会挂起所有线程, 进行Full GC操作. 如果这时刚巧应用服务器上有一个事务没有提交或回滚, 而锁定了某条关键记录, 就引起了上面问题. 还好是数据库顶过去了, 否则会需要重启所有应用服务器, 或重起数据库才能解决. &#160; &#160; Java让很多的应用开发人员高兴, 但并没有让系统维护人员高兴, 不需要管理内存的分配和释放, 是件好事, 但只是在中小应用中是好事, 如果并发率高了, [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp; &nbsp; 某一天, 在oramon的监控日志中, 突然看到数据库的事务数和日志生成量出现下跌的情况, 持续时间长达30秒, 这个原因得好好查查. 在oramon的Active SQL日志中发现了大量的锁等待, 被等待的语句发生在两个相对比较忙的表中. </p>
<blockquote class="prefont"><p>
www.AnySQL.net Cmmt Redo<br />
02/xx-13:03:04&nbsp; 13K&nbsp; 39M<br />
02/xx-13:03:14 3389&nbsp;  9M<br />
02/xx-13:03:24 3597&nbsp;  8M<br />
02/xx-13:03:34 5500&nbsp; 17M<br />
02/xx-13:03:44&nbsp; 15K&nbsp; 54M<br />
02/xx-13:03:54&nbsp; 15K&nbsp; 43M
</p></blockquote>
<p>&nbsp; &nbsp; 锁等待一般要请应用开发人员协助分析了, 分析了应用服务器端日志后, 基本确定是因为有几台应用服务器在那个时间点做了比较多的Full GC, 当用优化的GC算法失效时, Java会挂起所有线程, 进行Full GC操作. 如果这时刚巧应用服务器上有一个事务没有提交或回滚, 而锁定了某条关键记录, 就引起了上面问题. 还好是数据库顶过去了, 否则会需要重启所有应用服务器, 或重起数据库才能解决. </p>
<p>&nbsp; &nbsp; Java让很多的应用开发人员高兴, 但并没有让系统维护人员高兴, 不需要管理内存的分配和释放, 是件好事, 但只是在中小应用中是好事, 如果并发率高了, 自带的垃圾回收就成问题了, 不回收则会报内存溢出. 如果分配的内存大, 垃圾回收的速度会很慢, 这一点可能是限制了Java在64位操作系统上大规模使用的主要原因, 用32位的就算有足够多的内存, 也用不到, 然后就搞虚拟化, 结果是应用服务器的数量急增, 也造成了数据库宝贵的连接资源的大量浪费. </p>
<p>&nbsp; &nbsp; C语言中的指针及内存分配, 虽然复杂, 但用好了就不会有这方面的问题, 比如oramon程序, 跑了三四个月, 内存总是不变的. Java的解决之道也许是要引进一个free的操作, 让应用程序开发人员, 可以指定对象释放一些内存, 还一点控制操作给程序开发人员. </p>
<p>&nbsp; &nbsp; 如果一定要追求开发的速度, 如果没有高的并发, Java也许是首选. 但其他情况, Java也许不是, 昨天前天看Java的内存回收机制, 看得吐血也没有搞明白. 上面说的问题, 也不是我们独有的问题, 很多地方都会有. </p>
<h3  class="related_post_title">Relative Posts:</h3><ul class="related_post"><li>2010/05/07 -- <a href="http://www.anysql.net/tools/webchart-batch-query.html" title="批量数据查询需求">批量数据查询需求</a> (0)</li><li>2010/03/04 -- <a href="http://www.anysql.net/tools/webchart-rows-filter.html" title="为DataReport增加条件过滤功能">为DataReport增加条件过滤功能</a> (1)</li><li>2010/02/26 -- <a href="http://www.anysql.net/tools/webchart-dbconn-config2.html" title="WebChart的DB连接配置2">WebChart的DB连接配置2</a> (0)</li><li>2010/02/20 -- <a href="http://www.anysql.net/tools/webchart-multidb-support.html" title="定义不同数据源的SQL">定义不同数据源的SQL</a> (4)</li><li>2010/02/04 -- <a href="http://www.anysql.net/tools/webchart-form-data-display.html" title="DataReport的Form格式显示">DataReport的Form格式显示</a> (0)</li><li>2010/01/26 -- <a href="http://www.anysql.net/tools/webchart-logical-dbaccess2.html" title="逻辑连接层与物理连接层(2)">逻辑连接层与物理连接层(2)</a> (1)</li><li>2010/01/21 -- <a href="http://www.anysql.net/tools/anysql-jdbc-driver.html" title="AnySQL JDBC Driver">AnySQL JDBC Driver</a> (1)</li><li>2010/01/20 -- <a href="http://www.anysql.net/tools/webchart-logical-dbaccess.html" title="逻辑连接层与物理连接层">逻辑连接层与物理连接层</a> (4)</li><li>2010/01/08 -- <a href="http://www.anysql.net/tools/webchart-super-expression.html" title="DataReport中的超级表达式">DataReport中的超级表达式</a> (0)</li><li>2010/01/08 -- <a href="http://www.anysql.net/tools/webchart-merge-dup-values.html" title="DataReport的重复值合并">DataReport的重复值合并</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.anysql.net/developer/java_free_memory.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Linux获取主要Load信息</title>
		<link>http://www.anysql.net/dba/get_linux_load_metrics.html</link>
		<comments>http://www.anysql.net/dba/get_linux_load_metrics.html#comments</comments>
		<pubDate>Fri, 13 Feb 2009 18:15:58 +0000</pubDate>
		<dc:creator>anysql</dc:creator>
				<category><![CDATA[DBA]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Load]]></category>
		<category><![CDATA[Memory]]></category>

		<guid isPermaLink="false">http://www.anysql.net/wordpress/uncategorized/linux%e8%8e%b7%e5%8f%96%e4%b8%bb%e8%a6%81load%e4%bf%a1%e6%81%af.html</guid>
		<description><![CDATA[&#160; &#160; 在AIX下用C语句在oramon工具中收集了主机层面的几个Load值, 对于评估主机性能好象更有感觉了. www.AnySQL.net&#160; Load SY/WT/US&#160; Net Pgio 02/12-18:29:30&#160; 3.55&#160; 7/23/20 276M&#160; &#160; 0 02/12-18:29:40&#160; 3.63&#160; 8/23/19 374M&#160; &#160; 0 02/12-18:29:50&#160; 3.37&#160; 8/22/20 339M&#160; &#160; 0 02/12-18:30:00&#160; 3.39&#160; 8/24/19 311M&#160; &#160; 1 02/12-18:30:10&#160; 3.39 10/21/32 366M&#160; &#160; 2 02/12-18:30:20&#160; 3.26&#160; 8/25/22 349M&#160; &#160; 0 02/12-18:30:30&#160; 3.44&#160; 9/26/21 406M&#160; &#160; 0 02/12-18:30:40&#160; 3.31&#160; 7/26/21 185M&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp; &nbsp; 在AIX下用C语句在oramon工具中收集了主机层面的几个Load值, 对于评估主机性能好象更有感觉了. </p>
<blockquote class="prefont"><p>
www.AnySQL.net&nbsp; Load SY/WT/US&nbsp; Net Pgio <br />
02/12-18:29:30&nbsp; 3.55&nbsp; 7/23/20 276M&nbsp; &nbsp; 0 <br />
02/12-18:29:40&nbsp; 3.63&nbsp; 8/23/19 374M&nbsp; &nbsp; 0 <br />
02/12-18:29:50&nbsp; 3.37&nbsp; 8/22/20 339M&nbsp; &nbsp; 0 <br />
02/12-18:30:00&nbsp; 3.39&nbsp; 8/24/19 311M&nbsp; &nbsp; 1 <br />
02/12-18:30:10&nbsp; 3.39 10/21/32 366M&nbsp; &nbsp; 2 <br />
02/12-18:30:20&nbsp; 3.26&nbsp; 8/25/22 349M&nbsp; &nbsp; 0 <br />
02/12-18:30:30&nbsp; 3.44&nbsp; 9/26/21 406M&nbsp; &nbsp; 0 <br />
02/12-18:30:40&nbsp; 3.31&nbsp; 7/26/21 185M&nbsp; &nbsp; 0 <br />
02/12-18:30:50&nbsp; 3.50&nbsp; 8/23/23 286M&nbsp; &nbsp; 2 <br />
02/12-18:31:00&nbsp; 3.63&nbsp; 9/24/22 399M&nbsp; &nbsp; 0
</p></blockquote>
<p>&nbsp; &nbsp; 但在Linux上我只实现了第一列, 后面的几列都没有去想过呢. 但很想去实现它, 于是在网上搜了搜, 然后跑到proc文件系统中去cat了几把, 发现需要去解释以下几个文件. </p>
<blockquote class="prefont"><p>
load &#8212; /proc/loadavg<br />
cpu  &#8212; /proc/stat<br />
net  &#8212; /proc/net/dev<br />
pgio &#8212; /proc/vmstat
</p></blockquote>
<p>&nbsp; &nbsp; 用Perl来取这些值, 到是有很多的Package可以找到, 但用C的例子则还没有, 自已写吧. </p>
<h3  class="related_post_title">Relative Posts:</h3><ul class="related_post"><li>2008/07/11 -- <a href="http://www.anysql.net/developer/sqlplus_strict_comment.html" title="用C取得Linux负荷值?">用C取得Linux负荷值?</a> (9)</li><li>2009/03/18 -- <a href="http://www.anysql.net/developer/gcc_aix_64bit_io.html" title="C程序的64位IO支持">C程序的64位IO支持</a> (1)</li><li>2008/05/03 -- <a href="http://www.anysql.net/developer/alipay_first_one_week.html" title="AIX下C语言取得Load值">AIX下C语言取得Load值</a> (2)</li><li>2007/08/09 -- <a href="http://www.anysql.net/developer/unix_posix_thread.html" title="Unix/Linux下C语言POSIX多线程程序示例">Unix/Linux下C语言POSIX多线程程序示例</a> (3)</li><li>2007/08/08 -- <a href="http://www.anysql.net/developer/unix_fork_thread.html" title="Unix/Linux上C语言fork多个进程的代码示例">Unix/Linux上C语言fork多个进程的代码示例</a> (0)</li><li>2010/06/18 -- <a href="http://www.anysql.net/dba/get-linux-iostat.html" title="Linux下获取IO压力数据">Linux下获取IO压力数据</a> (4)</li><li>2010/04/19 -- <a href="http://www.anysql.net/developer/sqluldr2-windows-sdk-released.html" title="发布SQLULDR2 Windows SDK">发布SQLULDR2 Windows SDK</a> (2)</li><li>2009/10/27 -- <a href="http://www.anysql.net/developer/simple-c-program-tuning.html" title="一次简单C程序的性能优化">一次简单C程序的性能优化</a> (5)</li><li>2009/04/06 -- <a href="http://www.anysql.net/tools/oramon_windows_osload.html" title="Windows主机性能数据">Windows主机性能数据</a> (2)</li><li>2009/03/04 -- <a href="http://www.anysql.net/developer/java_free_memory.html" title="该死的Java Full GC">该死的Java Full GC</a> (4)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.anysql.net/dba/get_linux_load_metrics.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>MVIEW引起ORA-04031</title>
		<link>http://www.anysql.net/oracle/mview_ora_04031.html</link>
		<comments>http://www.anysql.net/oracle/mview_ora_04031.html#comments</comments>
		<pubDate>Tue, 18 Dec 2007 16:50:40 +0000</pubDate>
		<dc:creator>anysql</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Memory]]></category>
		<category><![CDATA[MVIEW]]></category>
		<category><![CDATA[Refresh]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.anysql.net/wordpress/uncategorized/mview%e5%bc%95%e8%b5%b7ora-04031.html</guid>
		<description><![CDATA[&#160; &#160; 有一个数据库报了ORA-04031错误, 等我们上去看时, 却是好的, 通过查询Statspack有关视图, 发现Shared Pool Free Memory在这之前是逐渐减少的, sql area部分占得很大. 可能的原因是, 当Oracle遇到这个错误后, 自动做了一次Flush Pool操作. 于是写了一段程序去跟踪SQL占用的内存, 发现有两个SQL语句很不正常, 版本数很多, 占用的内存也很大, 差不多占了一半的sql area. ASQL&#62; ora share ADDRESS&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;CHILDS&#160;&#160;&#160;&#160; BYTES &#8212;&#8212;&#8212;&#8212;&#8212;- &#8212;&#8212; &#8212;&#8212;&#8212; 0000040000A328F8&#160;&#160; 1026 215577124 000004000F7AB058&#160;&#160; 1026 215503530 &#160; &#160; 来看一下这两个SQL语句是什么? ASQL&#62; ora sql 0000040000A328F8 update sys.sumpartlog$ s set s.timestamp = :1, s.scn = :2 &#160;&#160;where&#160;&#160;rowid in&#160;&#160;(select [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp; &nbsp; 有一个数据库报了ORA-04031错误, 等我们上去看时, 却是好的, 通过查询Statspack有关视图, 发现Shared Pool Free Memory在这之前是逐渐减少的, sql area部分占得很大. 可能的原因是, 当Oracle遇到这个错误后, 自动做了一次Flush Pool操作. 于是写了一段程序去跟踪SQL占用的内存, 发现有两个SQL语句很不正常, 版本数很多, 占用的内存也很大, 差不多占了一半的sql area.</p>
<blockquote class="prefont"><p>
ASQL&gt; ora share</p>
<p>ADDRESS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CHILDS&nbsp;&nbsp;&nbsp;&nbsp; BYTES<br />
&#8212;&#8212;&#8212;&#8212;&#8212;- &#8212;&#8212; &#8212;&#8212;&#8212;<br />
0000040000A328F8&nbsp;&nbsp; 1026 215577124<br />
000004000F7AB058&nbsp;&nbsp; 1026 215503530
</p></blockquote>
<p>&nbsp; &nbsp; 来看一下这两个SQL语句是什么? </p>
<blockquote class="prefont"><p>
ASQL&gt; ora sql 0000040000A328F8</p>
<p>update sys.sumpartlog$ s set s.timestamp = :1, s.scn = :2 <br />
&nbsp;&nbsp;where&nbsp;&nbsp;rowid in&nbsp;&nbsp;(select rowid from sumpartlog$ AS OF SNAPSHOT(:3) s1 <br />
&nbsp;&nbsp;&nbsp;&nbsp; where s1.bo# = :4&nbsp;&nbsp; and s1.timestamp &gt;= <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; to_date(&#8217;4000-01-01:00:00:00&#8242;,&#8217;YYYY-MM-DD:HH24:MI:SS&#8217;))</p>
<p>ASQL&gt; ora sql 000004000F7AB058</p>
<p>update sys.sumdelta$ s set s.timestamp = :1, s.scn = :2&nbsp;&nbsp;<br />
&nbsp;&nbsp; where&nbsp;&nbsp;rowid in&nbsp;&nbsp;(select rowid from sys.sumdelta$ AS OF SNAPSHOT (:3) s1&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where s1.tableobj# = :4&nbsp;&nbsp; and s1.timestamp &gt;= <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;to_date(&#8217;4000-01-01:00:00:00&#8242;,&#8217;YYYY-MM-DD:HH24:MI:SS&#8217;))
</p></blockquote>
<p>&nbsp; &nbsp; 很明显这不是我们系统中的SQL语句, 因具只好搜索Metalink了, 找到这两个表和实体化视图的On Commit刷新有关. 进一步查这些SQL语句不能共享的原因, 发现都是FLASHBACK CURSOR这一列为Y. 进一步搜索Metalink, 终于找到原因了, 是Bug 6010070. 现在还没有办法解决, Oracle明确没有说哪个版本已解决. 只要不用On Commit刷新就行了. </p>
<h3  class="related_post_title">Relative Posts:</h3><ul class="related_post"><li>2007/03/29 -- <a href="http://www.anysql.net/tools/refresh_mysql_delete_where.html" title="使refresh_mysql适用于数据归档的一点改进">使refresh_mysql适用于数据归档的一点改进</a> (0)</li><li>2007/03/29 -- <a href="http://www.anysql.net/dba/data_lost_by_mview_refresh.html" title="由物化视图Complete刷新引起的数据丢失">由物化视图Complete刷新引起的数据丢失</a> (11)</li><li>2007/03/14 -- <a href="http://www.anysql.net/tools/oracle_mysql_replication_demo.html" title="refresh_mysql.pl角本的一个配置例子">refresh_mysql.pl角本的一个配置例子</a> (0)</li><li>2007/03/09 -- <a href="http://www.anysql.net/oracle/mvlog_with_rowid_primarykey.html" title="Oracle的实体化视图(MVIEW)的深入研究之四">Oracle的实体化视图(MVIEW)的深入研究之四</a> (2)</li><li>2007/03/09 -- <a href="http://www.anysql.net/oracle/star_in_mview.html" title="Oracle的实体化视图(MVIEW)的深入研究之三">Oracle的实体化视图(MVIEW)的深入研究之三</a> (0)</li><li>2007/03/08 -- <a href="http://www.anysql.net/oracle/improve_mv_refresh.html" title="Oracle的实体化视图(MVIEW)的深入研究之一">Oracle的实体化视图(MVIEW)的深入研究之一</a> (0)</li><li>2008/08/04 -- <a href="http://www.anysql.net/oracle/high_phyread_assm_dml.html" title="ASSM下DML的物理读高">ASSM下DML的物理读高</a> (5)</li><li>2008/07/28 -- <a href="http://www.anysql.net/oracle/get_the_credit_card.html" title="不可逆的日期转换">不可逆的日期转换</a> (4)</li><li>2008/06/23 -- <a href="http://www.anysql.net/dba/apache_tomcat.html" title="根据表名搜索SQL语句">根据表名搜索SQL语句</a> (0)</li><li>2008/03/15 -- <a href="http://www.anysql.net/dba/hash_join_or_condition.html" title="OR引起的Join性能问题">OR引起的Join性能问题</a> (3)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.anysql.net/oracle/mview_ora_04031.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL每个Session所需要的内存情况</title>
		<link>http://www.anysql.net/mysql/mysql_session_memory_usage.html</link>
		<comments>http://www.anysql.net/mysql/mysql_session_memory_usage.html#comments</comments>
		<pubDate>Thu, 05 Apr 2007 05:05:02 +0000</pubDate>
		<dc:creator>anysql</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Buffer]]></category>
		<category><![CDATA[Join]]></category>
		<category><![CDATA[Memory]]></category>
		<category><![CDATA[Session]]></category>
		<category><![CDATA[Sort]]></category>

		<guid isPermaLink="false">http://www.anysql.net/wordpress/uncategorized/mysql%e6%af%8f%e4%b8%aasession%e6%89%80%e9%9c%80%e8%a6%81%e7%9a%84%e5%86%85%e5%ad%98%e6%83%85%e5%86%b5.html</guid>
		<description><![CDATA[1, PGA &#160; &#160; 在Oracle中每个会话都会有PGA, MySQL中的会话也是如此. 主要包括三部份: (a), 堆栈区, 由THREAD_STACK变量来决定; (b), 接收缓冲(Receive Buffer/Connection Buffer), 由NET_BUFFER_LENGTH参数决定; (c), 发送缓冲(Send Buffer/Result Buffer), 同接收缓冲区同样大小. 当在执行SQL语时, 会将SQL语句的文本复制一份, 如果你的SQL写得很长, 这部份也不可以小看的哦! 当进程或线程不再需要时, 则这些内存区域会释放. 2, IO Buffer &#160; &#160; IO读取缓冲, 顺序读时由参数READ_BUFFER_SIZE控制大小, 而随机读时由READ_RND_BUFFER_SIZE参数来决定, 在InnoDB下据说是没用的, 因为InnoDB本身就缓冲机制, 但是在读取临时文件时是否有效呢? 象Oracle中有专门的SORT_MULTIBLOCK_READ_COUNT参数. 3, Sort Buffer &#160; &#160; 象Oracle中的SORT_AREA_SIZE一样, MySQL也有参数SORT_BUFFER_SIZE来将数据放到内存来进行排序, 比较容易理解. 有一个问题是, 当排序操作执行完后, 这些内存是立刻释放呢? 还是要到会话结束呢? 4, Join Buffer &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>1, <b>PGA</b> </p>
<p>&nbsp; &nbsp; 在Oracle中每个会话都会有PGA, MySQL中的会话也是如此. 主要包括三部份: (a), 堆栈区, 由THREAD_STACK变量来决定; (b), 接收缓冲(Receive Buffer/Connection Buffer), 由NET_BUFFER_LENGTH参数决定; (c), 发送缓冲(Send Buffer/Result Buffer), 同接收缓冲区同样大小. 当在执行SQL语时, 会将SQL语句的文本复制一份, 如果你的SQL写得很长, 这部份也不可以小看的哦! 当进程或线程不再需要时, 则这些内存区域会释放.</p>
<p>2, <b>IO Buffer</b> </p>
<p>&nbsp; &nbsp; IO读取缓冲, 顺序读时由参数READ_BUFFER_SIZE控制大小, 而随机读时由READ_RND_BUFFER_SIZE参数来决定, 在InnoDB下据说是没用的, 因为InnoDB本身就缓冲机制, 但是在读取临时文件时是否有效呢? 象Oracle中有专门的SORT_MULTIBLOCK_READ_COUNT参数. </p>
<p>3, <b>Sort Buffer</b> </p>
<p>&nbsp; &nbsp; 象Oracle中的SORT_AREA_SIZE一样, MySQL也有参数SORT_BUFFER_SIZE来将数据放到内存来进行排序, 比较容易理解. 有一个问题是, 当排序操作执行完后, 这些内存是立刻释放呢? 还是要到会话结束呢? </p>
<p>4, <b>Join Buffer</b> </p>
<p>&nbsp; &nbsp; 我到现在还不明白这一块内存是怎么用的? 当一个表没有索引可以用时, MySQL用这一块内存区进行Fast Full Join, 每两个表之间的Full Join都会使用一块这个区域, 如果更复杂的SQL包括很多个表, 有可能要使用多个Join Buffer, <strong>这下我更晕了</strong>, 理论上(按照Oracle的)最多两个就够了吧, 因为Join只能在两个表间进行. 另外MySQL中所有的内存中的表都以Hash方式组织, 因此好象都是Oracle的Hash Join了?</p>
<p>5, <b>BLOB Buffer</b> </p>
<p>&nbsp; &nbsp; 当我们去扫描一个有BLOB列的表时, 会要配一个和返回记录中最大的BLOB大小一样的缓冲区. 这个有点不爽了, 如果BLOB中有两G的数据呢? 这一块如何释放呢? SQL执行完了就释放? </p>
<p>&nbsp; &nbsp; 以上只是我在看书时的猜测, 请大家扔砖吧! </p>
<h3  class="related_post_title">Relative Posts:</h3><ul class="related_post"><li>2007/04/05 -- <a href="http://www.anysql.net/mysql/how_mysql_do_sort.html" title="MySQL数据库如何进行排序(Sort)操作?">MySQL数据库如何进行排序(Sort)操作?</a> (1)</li><li>2010/02/26 -- <a href="http://www.anysql.net/tools/webchart-dbconn-config2.html" title="WebChart的DB连接配置2">WebChart的DB连接配置2</a> (0)</li><li>2010/02/20 -- <a href="http://www.anysql.net/tools/webchart-multidb-support.html" title="定义不同数据源的SQL">定义不同数据源的SQL</a> (4)</li><li>2010/01/26 -- <a href="http://www.anysql.net/tools/webchart-logical-dbaccess2.html" title="逻辑连接层与物理连接层(2)">逻辑连接层与物理连接层(2)</a> (1)</li><li>2010/01/05 -- <a href="http://www.anysql.net/tools/webchart-forall-loop.html" title="DataReport中的FORALL循环">DataReport中的FORALL循环</a> (0)</li><li>2009/12/25 -- <a href="http://www.anysql.net/tools/sqluldr2-customized-escape-chars.html" title="SQLULDR2的自定义转义符处理">SQLULDR2的自定义转义符处理</a> (2)</li><li>2009/11/07 -- <a href="http://www.anysql.net/tools/sqluldr2-mysql-data-migration-test.html" title="MySQL数据迁移测试">MySQL数据迁移测试</a> (8)</li><li>2009/10/30 -- <a href="http://www.anysql.net/tools/sqluldr2-high-perf-insert-unload.html" title="SQLULDR2功能增加, 性能不减">SQLULDR2功能增加, 性能不减</a> (14)</li><li>2009/10/28 -- <a href="http://www.anysql.net/tools/sqluldr2-mysql-insert-sqls.html" title="SQLULDR2生成Insert SQL语句">SQLULDR2生成Insert SQL语句</a> (4)</li><li>2009/10/27 -- <a href="http://www.anysql.net/tools/sqluldr2-more-escape-chars.html" title="将SQLULDR2转义符进行到底">将SQLULDR2转义符进行到底</a> (3)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.anysql.net/mysql/mysql_session_memory_usage.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
