<?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>DBAlife &#187; SQL</title>
	<atom:link href="http://www.dbalife.com/archives/tag/sql/feed" rel="self" type="application/rss+xml" />
	<link>http://www.dbalife.com</link>
	<description>网站系统架构实践</description>
	<lastBuildDate>Wed, 27 Jul 2011 09:57:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>MySQL Slow Query</title>
		<link>http://www.dbalife.com/archives/539.html</link>
		<comments>http://www.dbalife.com/archives/539.html#comments</comments>
		<pubDate>Wed, 19 Jan 2011 17:38:32 +0000</pubDate>
		<dc:creator>skywalker</dc:creator>
				<category><![CDATA[DB性能优化]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[调优]]></category>

		<guid isPermaLink="false">http://www.dbalife.com/archives/539.html</guid>
		<description><![CDATA[转载自http://www.perfgeeks.com/?p=365 优化MySQL最重要的一部分工作是先确定”有问题”的查询语句。只有先找出这些查询较慢的sql查询(执行时间较长)，我们才能进一步分析原因并且优化它。MySQL为我们提供了Slow Query Log记录功能，它能记录执行时间超过了特定时长的查询。分析Slow Query Log有助于帮我们找到”问题”查询。 记录slow queries 首先，我们需要查看mysql server版本号，以及是否配置启用了slow query log。查看mysql server版本号，主要是一些功能以及配置依赖于mysql server 版本号 查看mysql server版本号 $echo "status" &#124;mysql &#124;grep "Server version" Server version: 5.1.38-log Source distribution 不同的MySQL版本，设定与功能略有不同。 检查当前服务器有没有在记录slow query $mysqladmin var &#124;grep "log_slow" &#124;tr -d "&#124;" log_slow_queries OFF 当log_slow_queries是ON时，才表示已经启用了记录slow query功能。默认是不记录slow query的。 启用slow query日志 #//将下列配置放到my.cnf中，查看my.cnf位置可以使用命令ps -ef &#124;grep mysqld_safe [mysqld] log-slow-queries = /var/lib/mysql/slow-queries.log long_query_time = [...]
Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/522.html' rel='bookmark' title='MySQL5.5复制/同步的新特性及改进'>MySQL5.5复制/同步的新特性及改进</a></li>
<li><a href='http://www.dbalife.com/archives/521.html' rel='bookmark' title='MySQL Replication基本原理'>MySQL Replication基本原理</a></li>
<li><a href='http://www.dbalife.com/archives/133.html' rel='bookmark' title='PIX logging Architecture所需perl module的几点注意'>PIX logging Architecture所需perl module的几点注意</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div class="entry">
<p>转载自http://www.perfgeeks.com/?p=365</p>
<hr style="width: 100%; height: 2px;" />
<p>优化MySQL最重要的一部分工作是先确定”有问题”的查询语句。只有先找出这些查询较慢的sql查询(执行时间较长)，我们才能进一步分析原因并且优化它。MySQL为我们提供了Slow  Query Log记录功能，它能记录执行时间超过了特定时长的查询。分析Slow Query Log有助于帮我们找到”问题”查询。</p>
<h2>记录slow queries</h2>
<p>首先，我们需要查看mysql server版本号，以及是否配置启用了slow query log。查看mysql  server版本号，主要是一些功能以及配置依赖于mysql server 版本号<br />
<strong>查看mysql  server版本号</strong></p>
<div class="codesnip-container">
<pre style="font-family: monospace;" class="bash codesnip"><span class="re1">$echo</span> <span class="st0">"status"</span> <span class="sy0">|</span>mysql <span class="sy0">|</span><span class="kw2">grep</span> <span class="st0">"Server version"</span>
Server version:         5.1.38-log Source distribution</pre>
</div>
<p>不同的MySQL版本，设定与功能略有不同。<br />
<strong>检查当前服务器有没有在记录slow query</strong></p>
<div class="codesnip-container">
<pre style="font-family: monospace;" class="bash codesnip"><span class="re1">$mysqladmin</span> var <span class="sy0">|</span><span class="kw2">grep</span> <span class="st0">"log_slow"</span> <span class="sy0">|</span><span class="kw2">tr</span> <span class="re5">-d</span> <span class="st0">"|"</span>
log_slow_queries	OFF</pre>
</div>
<p>当log_slow_queries是ON时，才表示已经启用了记录slow query功能。默认是不记录slow  query的。<br />
<strong>启用slow query日志</strong></p>
<div class="codesnip-container">
<pre style="font-family: monospace;" class="bash codesnip"><span class="co0">#//将下列配置放到my.cnf中，查看my.cnf位置可以使用命令ps -ef |grep mysqld_safe</span>
<span class="br0">[</span>mysqld<span class="br0">]</span>
log-slow-queries	= <span class="sy0">/</span>var<span class="sy0">/</span>lib<span class="sy0">/</span>mysql<span class="sy0">/</span>slow-queries.log
long_query_time		= <span class="nu0">1</span>
log-queries-not-using-indexes
log-slow-admin-statements</pre>
</div>
<p>上面的配置打开了slow query日志,将会捕获了执行时间超过了1秒的查询，包括执行速度较慢的管理命令(比如OPTIMEZE  TABLE),并且记录了没有使用索引的查询。这些SQL，都会被记录到log-slow-queries指定的文件/var/lib/mysql/slow-queries.log文件中。</p>
<ul>
<ol>log-slow-queries &lt;slow_query_log_file&gt;<br />
存放slow query日志的文件。你必须保证mysql  server进程mysqld_safe进程用户对该文件有w权限。</ol>
<ol>long_query_time<br />
如果query  time超过了该值，则认为是较慢查询，并被记录下来。单位是秒，最小值是1,默认值是10秒。10秒对于大多数应用来讲，太长了。我们推荐从3秒开始，依次减少，每次都找出最”昂贵”的10条SQL语句并且优化他们。日复一日，一步一步优化。一次性找出很多条SQL语句，对于优化来讲，意义并不大。</ol>
<ol>log-queries-not-using-indexes<br />
MySQL会将没有使用索引的查询记录到slow  query日志中。无论它执行有多快，查询语句没有使用索引，都会被记录。有的时候，有些没有使用引索的查询非常快(例如扫描很小的表)，但也有可能导致服务器变慢，甚至还会使用大量的磁盘空间。</ol>
<ol>log-slow-admin-statements<br />
一些管理指令，也会被记录。比如OPTIMEZE TABLE, ALTER  TABLE等等。</ol>
</ul>
<h2>日志文件</h2>
<p>我们可以通过tail -f查看日志文件。</p>
<div class="codesnip-container">
<pre style="font-family: monospace;" class="bash codesnip"><span class="re1">$tail</span> <span class="re5">-f</span> <span class="sy0">/</span>var<span class="sy0">/</span>lib<span class="sy0">/</span>mysql<span class="sy0">/</span>slow-queries.log
<span class="co0"># Time: 110107 16:22:11</span>
<span class="co0"># User@Host: root[root] @ localhost []</span>
<span class="co0"># Query_time: 9.869362  Lock_time: 0.000035 Rows_sent: 1  Rows_examined: 6261774</span>
SET <span class="re2">timestamp</span>=<span class="nu0">1294388531</span>;
<span class="kw1">select</span> count<span class="br0">(</span><span class="sy0">*</span><span class="br0">)</span> from ep_friends;</pre>
</div>
<p>第一行,SQL查询执行的时间<br />
第二行,执行SQL查询的连接信息<br />
第三行记录了一些我们比较有用的信息<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>Query_time</strong>  SQL执行的时间,越长则越慢<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>Lock_time</strong>  在MySQL服务器阶段(不是在存储引擎阶段)等待表锁时间<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>Rows_sent</strong>  查询返回的行数<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>Rows_examined</strong> 查询检查的行数<br />
Slow  Query日志，虽然帮助你记录了那些执行过了的SQL语句。但它不是万能的，意义可能没有你想象的那么大。它只告诉了你哪些语句慢，但是为什么慢?具体原因，还是需要你自己去分析，不断的调试。也许，你只需要换一条更有效的sql语句，也许你只需简单地增加一个索引，但也有可能你需要调整你应用程序的设计方案。比如，上面那条语句是很明显，它检查了600多万行数据。不幸的是，并不是每条语句都这么明显。也许还有别的原因，比如:<br />
*锁表了，导致查询处于等态状态。lock_time显示了查询等待锁被翻译的时间<br />
*数据或索引没有被缓存。常见于第一次启动服务器或者服务器没有调优<br />
*备份数据库，I/O变慢<br />
*也许同时运行了其它的查询，减少了当前查询</p>
<p>所以,不要过于紧张日志文件某条记录，而应该理性地审记，找出真正的原因。如果经常出现的slow  query需要特别注意。如果个别出现，则做一些常规检查即可。我们建议，统计并且形成基准报告，进行比较排除，比胡乱瞎撞有用。希望大家不要在这部分过于浪费时间与精力。</p>
<h2>线上记录slow query</h2>
<p>上文的配置需要重启mysql  server进程mysqld才会生效。但是很多时候，尤其是产品运营环境，不希望每次修改都需要重新启动mysql服务器，也希望能在某些特定时间记录。MySQL5.1给我们提供了更为灵活的运行时控制，使得你不必重新启动mysql服务器，也能选择性地记录或者不记录某些slow  queries。</p>
<p>MySQL5.1中，提供了全局变量slow_query_log、slow_query_log_file可以灵活地控制enable/disable慢查询。同时可以通过long_query_time设置时间</p>
<div class="codesnip-container">
<pre style="font-family: monospace;" class="bash codesnip"><span class="co0">#//停用slow query记录</span>
<span class="co0">#注意:设置了slow_query_log全局变量, log_slow_queries也会隐性地跟着改变</span>
mysql<span class="sy0">&gt;</span><span class="kw1">set</span> global <span class="re2">slow_query_log</span>=OFF</pre>
</div>
<p>不幸运的是,在MySQL5.0并没有提供类似的全局变量来灵活控制，但是我们可以通过将long_query_time设置得足够大来避免记录某些查询语句。比如</p>
<div class="codesnip-container">mysql&gt;set global long_query_time = 3600;</div>
<p>MySQL5.0, 不关服务的情况下，希望不记录日志的办法是将日志文件成为/dev/null的符号链接(symbolic  link)。注意:你只需要在改变后运行FLUSH LOGS以确定MYSQL释放当前的日志文件描述符，重新把日志记录到/dev/null</p>
<p>和MySQL5.0不同,MySQL5.1可以在运行时改变日记行为，将日志记录到数据库表中。只要将mysql全局变量log_output设置为TABLE即可。MySQL会将日志分别记录到表mysql.gengera_log和mysql.slow_log二张表中。但是，我们推荐将日志记录在日记文件中。</p>
<div class="codesnip-container">mysql&gt; show variables like  ‘log_output’\G<br />
Variable_name: log_output<br />
Value: FILE<br />
mysql&gt;set  global log_output=’table’;</div>
<h2>缺陷与审记</h2>
<p>虽然记录了slow query能够帮助你优化产品。但是MySQL目前版本，还有几大蹩足的地方。<br />
1.MySQL5.0版本,  long_query_time时间粒度不够细,最小值为1秒。对于高并发性能的网页脚本而言，1秒出现的意义不大。即出现1秒的查询比较少。直到mysql5.1.21才提供更细粒度的long_query_time设定.<br />
2.不能将服务器执行的所有查询记录到慢速日志中。虽然MySQL普通日志记录了所有查询，但是它们是解析查询之前就记录下来了。这意味着普通日志没办法包含诸如执行时间，锁表时间，检查行数等信息。<br />
3.如果开启了log_queries_not_using_indexes选项，slow  query日志会充满过多的垃圾日志记录，这些快且高效的全表扫描查询(表小)会冲掉真正有用的slow queries记录。比如select * from  category这样的查询也会被记录下来。</p>
<p>通过<a href="http://www.mysqlperformanceblog.com/2007/07/18/microslow-patch-for-5120/">microslow-patch</a>补丁可使用更细的时间粒度，和记录所有执行过的sql语句。不过，使用这个补订不得不自己编译MySQL，出于稳定性考滤，我们推荐在开发测试环境，可以打上这个补丁，享受这个补丁带来的便利。在运营环境尽量不要这么做…</p>
<p>MySQL自带了mysqldumpslow工具用来分析slow query日志，除此之外，还有一些好用的开源工具。比如<a href="http://myprofi.sourceforge.net/index.shtml">MyProfi</a>、<a href="http://code.google.com/p/mysql-log-filter/">mysql-log-filter</a>，当然还有<a href="http://hackmysql.com/mysqlsla">mysqlsla</a></p>
</div>
<p>Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/522.html' rel='bookmark' title='MySQL5.5复制/同步的新特性及改进'>MySQL5.5复制/同步的新特性及改进</a></li>
<li><a href='http://www.dbalife.com/archives/521.html' rel='bookmark' title='MySQL Replication基本原理'>MySQL Replication基本原理</a></li>
<li><a href='http://www.dbalife.com/archives/133.html' rel='bookmark' title='PIX logging Architecture所需perl module的几点注意'>PIX logging Architecture所需perl module的几点注意</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.dbalife.com/archives/539.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用SQL处理多行汇聚问题</title>
		<link>http://www.dbalife.com/archives/379.html</link>
		<comments>http://www.dbalife.com/archives/379.html#comments</comments>
		<pubDate>Wed, 03 Feb 2010 04:50:12 +0000</pubDate>
		<dc:creator>skywalker</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[数据库管理]]></category>
		<category><![CDATA[软件开发]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[多行]]></category>
		<category><![CDATA[汇聚]]></category>

		<guid isPermaLink="false">http://www.dbalife.com/?p=379</guid>
		<description><![CDATA[表结构如下： NAME                            Null          Type ------------------------  ---------  ----- N_SEC_CODE                NOT NULL  CHAR(6) C_RESEARCHER_CODE  NOT NULL  VARCHAR2(20) 此表保存了“股票”与“研究员”的对应关系数据，一般而言，对于同一只股票而言，可能有多个研究员对其进行跟踪研究。所以目前遇到一个要求，需查询出每只股票和对应的研究员（研究员代码间，使用逗号分隔）。 例如有如下数据： 000297                            [...]
Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/41.html' rel='bookmark' title='sqlplus下如何看执行计划'>sqlplus下如何看执行计划</a></li>
<li><a href='http://www.dbalife.com/archives/6.html' rel='bookmark' title='Oracle分析函数参考手册'>Oracle分析函数参考手册</a></li>
<li><a href='http://www.dbalife.com/archives/39.html' rel='bookmark' title='Statistics Lock导致的IMP问题'>Statistics Lock导致的IMP问题</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>表结构如下：<br />
NAME                            Null          Type<br />
------------------------  ---------  -----<br />
N_SEC_CODE                NOT NULL  CHAR(6)<br />
C_RESEARCHER_CODE  NOT NULL  VARCHAR2(20)</p>
<p>此表保存了“股票”与“研究员”的对应关系数据，一般而言，对于同一只股票而言，可能有多个研究员对其进行跟踪研究。所以目前遇到一个要求，需查询出每只股票和对应的研究员（研究员代码间，使用逗号分隔）。</p>
<p>例如有如下数据：<br />
000297                                    chenpeng           <br />
000297                                    liusu             <br />
合并处理后需显示为：<br />
000297                                    chenpeng,liusu</p>
<p>多行数据汇总聚一行，只需要把SQL中“n_sec_code”换为你的用来汇总的列，“c_researcher_code”替换为需合并文本的列，“m_researcher_stock_rel”替换为你的表名</p>
<p> SELECT n_sec_code,<br />
  TRANSLATE (LTRIM (text, '/'), '*/', '*,') researcherList<br />
   FROM<br />
  (SELECT ROW_NUMBER () OVER (PARTITION BY n_sec_code ORDER BY n_sec_code, lvl DESC) rn,<br />
    n_sec_code                                                                         ,<br />
    text<br />
     FROM<br />
    (SELECT n_sec_code,<br />
      LEVEL lvl       ,<br />
      SYS_CONNECT_BY_PATH (c_researcher_code,'/') text<br />
       FROM<br />
      (SELECT n_sec_code                      ,<br />
        c_researcher_code AS c_researcher_code,<br />
        ROW_NUMBER () OVER (PARTITION BY n_sec_code ORDER BY n_sec_code,c_researcher_code) x<br />
         FROM m_researcher_stock_rel<br />
     ORDER BY n_sec_code,<br />
        c_researcher_code<br />
      ) a CONNECT BY n_sec_code = PRIOR n_sec_code<br />
    AND x - 1                   = PRIOR x<br />
    )<br />
  )<br />
  WHERE rn = 1<br />
ORDER BY n_sec_code;</p>
<p>Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/41.html' rel='bookmark' title='sqlplus下如何看执行计划'>sqlplus下如何看执行计划</a></li>
<li><a href='http://www.dbalife.com/archives/6.html' rel='bookmark' title='Oracle分析函数参考手册'>Oracle分析函数参考手册</a></li>
<li><a href='http://www.dbalife.com/archives/39.html' rel='bookmark' title='Statistics Lock导致的IMP问题'>Statistics Lock导致的IMP问题</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.dbalife.com/archives/379.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sqlplus增强设置</title>
		<link>http://www.dbalife.com/archives/323.html</link>
		<comments>http://www.dbalife.com/archives/323.html#comments</comments>
		<pubDate>Thu, 24 Sep 2009 04:11:05 +0000</pubDate>
		<dc:creator>skywalker</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[数据库管理]]></category>
		<category><![CDATA[login]]></category>
		<category><![CDATA[prompt]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[sqlplus]]></category>
		<category><![CDATA[vi]]></category>

		<guid isPermaLink="false">http://www.dbalife.com/?p=323</guid>
		<description><![CDATA[更强的编辑器 sqlplus可以与vi整合，在sqlplus中调用vi编辑器。方法是在sqlplus中执行define_editor='vi'，或将define_editor='vi'添加到/product/10.2/sqlplus/admin/glogin.sql文件中。 之后再登录sqlplus，可以输入edit命令编辑上一次执行的sql。 更人性化的提示符 在glogin.sql文件中添加： set termout off default gname=idle column global_name new_value gname SELECT lower(USER) &#124;&#124; '@' &#124;&#124;upper(instance_name)&#124;&#124;'('&#124;&#124;nvl(UTL_INADDR.GET_HOST_ADDRESS, SYS_CONTEXT('userenv', 'ip_address'))&#124;&#124;')' GLOBAL_NAME FROM v$instance; set sqlprompt '&#38;gname&#62; ' set termout on 这样每次登录SQLPLUS提示符会自动更改为“当前用户名@实例名(IP地址)&#62; ”的形式。 10g以下版本在登录后切换用户的情况下，提示符不能自动更新。 No related posts.
No related posts.]]></description>
			<content:encoded><![CDATA[<p><strong>更强的编辑器</strong></p>
<p>sqlplus可以与vi整合，在sqlplus中调用vi编辑器。方法是在sqlplus中执行define_editor='vi'，或将define_editor='vi'添加到/product/10.2/sqlplus/admin/glogin.sql文件中。</p>
<p>之后再登录sqlplus，可以输入edit命令编辑上一次执行的sql。</p>
<p><strong>更人性化的提示符</strong></p>
<p>在glogin.sql文件中添加：</p>
<blockquote><p><span style="COLOR: green">set</span><span style="COLOR: gray"> </span><span style="COLOR: blue">termout</span><span style="COLOR: gray"> </span><span style="COLOR: green">off</span><span style="COLOR: gray"><br />
</span><span style="COLOR: green">default</span><span style="COLOR: gray"> </span><span style="COLOR: blue">gname</span><span style="COLOR: gray">=</span><span style="COLOR: blue">idle</span><span style="COLOR: gray"><br />
</span><span style="COLOR: green">column</span><span style="COLOR: gray"> </span><span style="COLOR: blue">global_name</span><span style="COLOR: gray"> </span><span style="COLOR: blue">new_value</span><span style="COLOR: gray"> </span><span style="COLOR: blue">gname</span><span style="COLOR: gray"><br />
</span><span style="COLOR: green">SELECT</span><span style="COLOR: gray"> </span><span style="COLOR: #00008b">lower</span><span style="COLOR: olive">(</span><span style="COLOR: green">USER</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> || </span><span style="COLOR: #8b0000">'</span><span style="COLOR: red">@</span><span style="COLOR: #8b0000">'</span><span style="COLOR: gray"> ||</span><span style="COLOR: #00008b">upper</span><span style="COLOR: olive">(</span><span style="COLOR: blue">instance_name</span><span style="COLOR: olive">)</span><span style="COLOR: gray">||</span><span style="COLOR: #8b0000">'</span><span style="COLOR: red">(</span><span style="COLOR: #8b0000">'</span><span style="COLOR: gray">||</span><span style="COLOR: blue">nvl</span><span style="COLOR: olive">(</span><span style="COLOR: blue">UTL_INADDR</span><span style="COLOR: gray">.</span><span style="COLOR: blue">GET_HOST_ADDRESS</span><span style="COLOR: gray">, </span><span style="COLOR: blue">SYS_CONTEXT</span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">'</span><span style="COLOR: red">userenv</span><span style="COLOR: #8b0000">'</span><span style="COLOR: gray">, </span><span style="COLOR: #8b0000">'</span><span style="COLOR: red">ip_address</span><span style="COLOR: #8b0000">'</span><span style="COLOR: olive">))</span><span style="COLOR: gray">||</span><span style="COLOR: #8b0000">'</span><span style="COLOR: red">)</span><span style="COLOR: #8b0000">'</span><span style="COLOR: gray"> </span><span style="COLOR: blue">GLOBAL_NAME</span><span style="COLOR: gray"> </span><span style="COLOR: green">FROM</span><span style="COLOR: gray"> </span><span style="COLOR: blue">v</span><span style="COLOR: gray">$</span><span style="COLOR: #00008b">instance</span><span style="COLOR: gray">;<br />
</span><span style="COLOR: green">set</span><span style="COLOR: gray"> </span><span style="COLOR: blue">sqlprompt</span><span style="COLOR: gray"> </span><span style="COLOR: #8b0000">'</span><span style="COLOR: red">&amp;gname&gt; </span><span style="COLOR: #8b0000">'</span><span style="COLOR: gray"><br />
</span><span style="COLOR: green">set</span><span style="COLOR: gray"> </span><span style="COLOR: blue">termout</span><span style="COLOR: gray"> </span><span style="COLOR: green">on</span></p></blockquote>
<p>这样每次登录SQLPLUS提示符会自动更改为“当前用户名@实例名(IP地址)&gt; ”的形式。</p>
<p>10g以下版本在登录后切换用户的情况下，提示符不能自动更新。</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.dbalife.com/archives/323.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>undo相关的sql</title>
		<link>http://www.dbalife.com/archives/278.html</link>
		<comments>http://www.dbalife.com/archives/278.html#comments</comments>
		<pubDate>Thu, 02 Jul 2009 03:36:41 +0000</pubDate>
		<dc:creator>skywalker</dc:creator>
				<category><![CDATA[DBA脚本]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[数据库管理]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[undo]]></category>

		<guid isPermaLink="false">http://www.dbalife.com/?p=278</guid>
		<description><![CDATA[查UNDO统计信息语句： SELECT TO_CHAR(BEGIN_TIME,'HH24:MI:SS') BEGIN_TIME, TO_CHAR(END_TIME,'HH24:MI:SS') END_TIME, UNDOBLKS FROM V$UNDOSTAT; -------------------------------------------结果-------------------------------------------------------------- begin_time end_time undoblocks 9:48:30        9:53:07        76293 9:38:30        9:48:30        143670 9:28:30        9:38:30        130921 9:18:30        9:28:30        122500 9:08:30        9:18:30    [...]
Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/178.html' rel='bookmark' title='表空间使用状况查询'>表空间使用状况查询</a></li>
<li><a href='http://www.dbalife.com/archives/47.html' rel='bookmark' title='用sql截取字符串'>用sql截取字符串</a></li>
<li><a href='http://www.dbalife.com/archives/144.html' rel='bookmark' title='等待事件相关的SQL'>等待事件相关的SQL</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><strong>查UNDO统计信息语句：</strong><br />
SELECT TO_CHAR(BEGIN_TIME,'HH24:MI:SS') BEGIN_TIME,<br />
TO_CHAR(END_TIME,'HH24:MI:SS') END_TIME,<br />
UNDOBLKS<br />
FROM V$UNDOSTAT;<br />
-------------------------------------------结果--------------------------------------------------------------<br />
begin_time end_time undoblocks<br />
9:48:30        9:53:07        76293<br />
9:38:30        9:48:30        143670<br />
9:28:30        9:38:30        130921<br />
9:18:30        9:28:30        122500<br />
9:08:30        9:18:30        149030<br />
8:58:30        9:08:30        144586<br />
8:48:30        8:58:30        108095<br />
8:38:30        8:48:30        63533<br />
8:28:30        8:38:30        72819<br />
8:18:30        8:28:30        23321<br />
8:08:30        8:18:30        2026<br />
7:58:30        8:08:30        15480<br />
7:48:30        7:58:30        91111<br />
7:38:30        7:48:30        15810<br />
7:28:30        7:38:30        56922<br />
7:18:30        7:28:30        30449<br />
7:08:30        7:18:30        6096<br />
6:58:30        7:08:30        15022<br />
6:48:30        6:58:30        91904<br />
6:38:30        6:48:30        38794<br />
6:28:30        6:38:30        111884<br />
----------------------------------------------------------------------------------------------------------<br />
<strong>查UNDO表空间的使用情况：</strong><br />
select<br />
  a.a1 表空间名,<br />
  substr(b.b2/1024/1024/1024,1,5) 表空间大小G,<br />
  substr(a.a2/1024/1024/1024,1,5) 剩余表空间G,<br />
  substr((b.b2-a.a2)/1024/1024/1024,1,5) 实际使用表空间G,<br />
  substr((b.b2-a.a2)/b.b2*100,1,5) 利用率,<br />
  c.c2 类型,<br />
  c.c3 区管理方式<br />
  from<br />
  (select tablespace_name a1,sum(Nvl(bytes,0)) a2 from dba_free_space group by tablespace_name) a,<br />
  (select tablespace_name b1,sum(bytes) b2 from dba_data_files group by tablespace_name) b,<br />
  (select tablespace_name c1,contents c2,extent_management c3 from dba_tablespaces) c<br />
  where a.a1=b.b1 and b.b1=c.c1<br />
  order by c.c2 desc<br />
-------------------------------------------------结果--------------------------------------------------------------------<br />
表空间名        表空间大小(G)        剩余(G)        使用        利用率        表空间类型        管理方式<br />
UNDOTBS1        17.24        1.124        16.12        93.48        UNDO        LOCAL<br />
----------------------------------------------------------------------------------------------------------------------------<br />
<strong>建议UNDO峰值：</strong><br />
select ur undo_retention,dbs db_block_size, ((ur * (ups * dbs)) + (dbs * 24)) / 1024 / 1024 as "M_bytes"<br />
from (select value as ur from v$parameter where name = 'undo_retention'),<br />
       (select (undoblks / ((end_time - begin_time) * 86400)) ups from v$undostat where undoblks in (select max(undoblks) from  v$undostat ) ),<br />
       (select value as dbs from v$parameter where name = 'db_block_size');<br />
----------------------------------------------结果------------------------------------------------------------------<br />
undo_retention        db_block_size        M_bytes<br />
10800                              8192                   33,376.96875</p>
<p>Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/178.html' rel='bookmark' title='表空间使用状况查询'>表空间使用状况查询</a></li>
<li><a href='http://www.dbalife.com/archives/47.html' rel='bookmark' title='用sql截取字符串'>用sql截取字符串</a></li>
<li><a href='http://www.dbalife.com/archives/144.html' rel='bookmark' title='等待事件相关的SQL'>等待事件相关的SQL</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.dbalife.com/archives/278.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>表空间使用状况查询</title>
		<link>http://www.dbalife.com/archives/178.html</link>
		<comments>http://www.dbalife.com/archives/178.html#comments</comments>
		<pubDate>Thu, 25 Sep 2008 01:16:25 +0000</pubDate>
		<dc:creator>skywalker</dc:creator>
				<category><![CDATA[DBA脚本]]></category>
		<category><![CDATA[数据库管理]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[表空间]]></category>

		<guid isPermaLink="false">http://www.dbalife.com/?p=178</guid>
		<description><![CDATA[SELECT D.TABLESPACE_NAME , SPACE "SUM_SPACE(M)" , BLOCKS SUM_BLOCKS , SPACE -NVL(FREE_SPACE,0) "USED_SPACE(M)" , ROUND((1-NVL(FREE_SPACE,0)/SPACE)*100,2) "USED_RATE(%)", FREE_SPACE "FREE_SPACE(M)" FROM (SELECT TABLESPACE_NAME , ROUND(SUM(BYTES)/(1024*1024),2) SPACE, SUM(BLOCKS) BLOCKS FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME ) D , (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES)/(1024*1024),2) FREE_SPACE FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME ) F WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) UNION ALL --if have tempfile SELECT D.TABLESPACE_NAME [...]
Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/278.html' rel='bookmark' title='undo相关的sql'>undo相关的sql</a></li>
<li><a href='http://www.dbalife.com/archives/62.html' rel='bookmark' title='查询一天归档文件的大小'>查询一天归档文件的大小</a></li>
<li><a href='http://www.dbalife.com/archives/144.html' rel='bookmark' title='等待事件相关的SQL'>等待事件相关的SQL</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>SELECT D.TABLESPACE_NAME                                ,<br />
SPACE "SUM_SPACE(M)"                                   ,<br />
BLOCKS SUM_BLOCKS                                      ,<br />
SPACE   -NVL(FREE_SPACE,0) "USED_SPACE(M)"             ,<br />
ROUND((1-NVL(FREE_SPACE,0)/SPACE)*100,2) "USED_RATE(%)",<br />
FREE_SPACE "FREE_SPACE(M)"<br />
FROM<br />
(SELECT TABLESPACE_NAME                ,<br />
ROUND(SUM(BYTES)/(1024*1024),2) SPACE,<br />
SUM(BLOCKS) BLOCKS<br />
FROM DBA_DATA_FILES<br />
GROUP BY TABLESPACE_NAME<br />
) D                    ,<br />
(SELECT TABLESPACE_NAME,<br />
ROUND(SUM(BYTES)/(1024*1024),2) FREE_SPACE<br />
FROM DBA_FREE_SPACE<br />
GROUP BY TABLESPACE_NAME<br />
) F<br />
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)</p>
<p>UNION ALL --if have tempfile</p>
<p>SELECT D.TABLESPACE_NAME                            ,<br />
SPACE "SUM_SPACE(M)"                               ,<br />
BLOCKS SUM_BLOCKS                                  ,<br />
USED_SPACE "USED_SPACE(M)"                         ,<br />
ROUND(NVL(USED_SPACE,0)/SPACE*100,2) "USED_RATE(%)",<br />
NVL(FREE_SPACE,0) "FREE_SPACE(M)"<br />
FROM<br />
(SELECT TABLESPACE_NAME                ,<br />
ROUND(SUM(BYTES)/(1024*1024),2) SPACE,<br />
SUM(BLOCKS) BLOCKS<br />
FROM DBA_TEMP_FILES<br />
GROUP BY TABLESPACE_NAME<br />
) D                                              ,<br />
(SELECT TABLESPACE_NAME                          ,<br />
ROUND(SUM(BYTES_USED)/(1024*1024),2) USED_SPACE,<br />
ROUND(SUM(BYTES_FREE)/(1024*1024),2) FREE_SPACE<br />
FROM V$TEMP_SPACE_HEADER<br />
GROUP BY TABLESPACE_NAME<br />
) F<br />
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)</p>
<p>Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/278.html' rel='bookmark' title='undo相关的sql'>undo相关的sql</a></li>
<li><a href='http://www.dbalife.com/archives/62.html' rel='bookmark' title='查询一天归档文件的大小'>查询一天归档文件的大小</a></li>
<li><a href='http://www.dbalife.com/archives/144.html' rel='bookmark' title='等待事件相关的SQL'>等待事件相关的SQL</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.dbalife.com/archives/178.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>模糊查询like &#039;%XX%&#039; 的优化一例</title>
		<link>http://www.dbalife.com/archives/176.html</link>
		<comments>http://www.dbalife.com/archives/176.html#comments</comments>
		<pubDate>Fri, 19 Sep 2008 06:47:33 +0000</pubDate>
		<dc:creator>skywalker</dc:creator>
				<category><![CDATA[DB性能优化]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[数据库管理]]></category>
		<category><![CDATA[like]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.dbalife.com/archives/%e6%a8%a1%e7%b3%8a%e6%9f%a5%e8%af%a2like-xx-%e7%9a%84%e4%bc%98%e5%8c%96%e4%b8%80%e4%be%8b/</guid>
		<description><![CDATA[sql中的like '%xx%'模糊查询无法走索引，影响执行速度。经测试itpub版主ifree的index_ffs+rowid方法比较有效，记录一下。 这里是示例： scott@ORCL&#62; CREATE INDEX SCOTT.i_dept_name &#160;&#160;2&#160; &#160;ON SCOTT.DEPT(DNAME) &#160;&#160;3&#160;&#160;; Index created. scott@ORCL&#62; Analyze Table SCOTT.DEPT Compute Statistics ; Table analyzed. scott@ORCL&#62; select * from scott.dept where &#160;&#160;2&#160;&#160;rowid in ( &#160;&#160;3&#160;&#160;select /*+ index_ffs(a i_dept_dname) */ &#160;&#160;4&#160;&#160;rowid from scott.dept a where dname like '%A%') &#160;&#160;5&#160;&#160;; 这个方法要求like查询出的记录不能太多，在我的应用中，这一方法使sql效率提高了近10倍。 Blogged with the Flock Browser Tags: sql, 优化, turning, [...]
Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/33.html' rel='bookmark' title='Oracle9i优化器介绍（上）'>Oracle9i优化器介绍（上）</a></li>
<li><a href='http://www.dbalife.com/archives/286.html' rel='bookmark' title='oralce10g shrink'>oralce10g shrink</a></li>
<li><a href='http://www.dbalife.com/archives/32.html' rel='bookmark' title='Oracle9i优化器介绍（下）'>Oracle9i优化器介绍（下）</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>sql中的like '%xx%'模糊查询无法走索引，影响执行速度。经测试itpub版主ifree的index_ffs+rowid方法比较有效，记录一下。</p>
<p>这里是示例：</p>
<div style="margin-left: 40px;"> scott@ORCL&gt; CREATE INDEX SCOTT.i_dept_name<br />
&nbsp;&nbsp;2&nbsp; &nbsp;ON SCOTT.DEPT(DNAME)<br />
&nbsp;&nbsp;3&nbsp;&nbsp;;</p>
<p>Index created.</p>
<p>scott@ORCL&gt; Analyze Table SCOTT.DEPT Compute Statistics ;</p>
<p>Table analyzed.</p>
<p>scott@ORCL&gt; select * from scott.dept where<br />
&nbsp;&nbsp;2&nbsp;&nbsp;rowid in (<br />
&nbsp;&nbsp;3&nbsp;&nbsp;select /*+ index_ffs(a i_dept_dname) */<br />
&nbsp;&nbsp;4&nbsp;&nbsp;rowid from scott.dept a where dname like '%A%')<br />
&nbsp;&nbsp;5&nbsp;&nbsp;;</p>
</div>
<p>这个方法要求like查询出的记录不能太多，在我的应用中，这一方法使sql效率提高了近10倍。</p>
<div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;">Blogged with the <a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser">Flock Browser</a></div>
<p><!-- technorati tags begin -->
<p style="font-size:10px;text-align:right;">Tags: <a href="http://technorati.com/tag/sql" rel="tag">sql</a>, <a href="http://technorati.com/tag/%E4%BC%98%E5%8C%96" rel="tag">优化</a>, <a href="http://technorati.com/tag/turning" rel="tag">turning</a>, <a href="http://technorati.com/tag/like" rel="tag">like</a>, <a href="http://technorati.com/tag/%E6%A8%A1%E7%B3%8A%E6%9F%A5%E8%AF%A2" rel="tag">模糊查询</a></p>
<p><!-- technorati tags end --></p>
<p>Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/33.html' rel='bookmark' title='Oracle9i优化器介绍（上）'>Oracle9i优化器介绍（上）</a></li>
<li><a href='http://www.dbalife.com/archives/286.html' rel='bookmark' title='oralce10g shrink'>oralce10g shrink</a></li>
<li><a href='http://www.dbalife.com/archives/32.html' rel='bookmark' title='Oracle9i优化器介绍（下）'>Oracle9i优化器介绍（下）</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.dbalife.com/archives/176.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>等待事件相关的SQL</title>
		<link>http://www.dbalife.com/archives/144.html</link>
		<comments>http://www.dbalife.com/archives/144.html#comments</comments>
		<pubDate>Wed, 30 Jul 2008 05:16:36 +0000</pubDate>
		<dc:creator>skywalker</dc:creator>
				<category><![CDATA[DBA脚本]]></category>
		<category><![CDATA[DB性能优化]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[数据库管理]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[session_wait]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[等待事件]]></category>

		<guid isPermaLink="false">http://www.dbalife.com/?p=144</guid>
		<description><![CDATA[--求等待事件及其对应的latch col event format a32 col name format a32 select sid,event,p1 as file_id, p2 as "block_id/latch", p3 as blocks,l.name from v$session_wait sw,v$latch l where event not like '%SQL%' and event not like '%rdbms%' and event not like '%mon%' and sw.p2 = l.latch#(+); --求等待事件及其热点对象 col owner format a18 col segment_name format a32 col segment_type format a32 [...]
Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/178.html' rel='bookmark' title='表空间使用状况查询'>表空间使用状况查询</a></li>
<li><a href='http://www.dbalife.com/archives/278.html' rel='bookmark' title='undo相关的sql'>undo相关的sql</a></li>
<li><a href='http://www.dbalife.com/archives/101.html' rel='bookmark' title='ORACLE STATSPACK REPORT输出结果说明'>ORACLE STATSPACK REPORT输出结果说明</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: x-small;">--求等待事件及其对应的latch</span></p>
<p><span style="font-size: x-small;">col event format a32<br />
col name format a32<br />
select sid,event,p1 as file_id, p2 as "block_id/latch", p3 as blocks,l.name<br />
from v$session_wait sw,v$latch l<br />
where event not like '%SQL%' and event not like '%rdbms%'<br />
and event not like '%mon%' and sw.p2 = l.latch#(+);</span><br />
<span style="font-size: x-small;">--求等待事件及其热点对象</span></p>
<p><span style="font-size: x-small;">col owner format a18<br />
col segment_name format a32<br />
col segment_type format a32<br />
select owner,segment_name,segment_type<br />
from dba_extents<br />
where file_id = &amp;file_id and &amp;block_id between block_id<br />
and block_id + &amp;blocks - 1;</span><br />
<span style="font-size: x-small;">--综合以上两条sql，同时显示latch及热点对象(速度较慢)</span></p>
<p><span style="font-size: x-small;">select sw.sid,event,l.name,de.segment_name<br />
from v$session_wait sw,v$latch l,dba_extents de<br />
where event not like '%SQL%' and event not like '%rdbms%'<br />
and event not like '%mon%' and sw.p2 = l.latch#(+) and sw.p1 = de.file_id(+) and p2 between de.block_id and de.block_id + de.blocks - 1;</span><br />
<span style="font-size: x-small;">--如果是非空闲等待事件，通过等待会话的sid可以求出该会话在执行的sql</span></p>
<p><span style="font-size: x-small;">select sql_text<br />
from v$sqltext_with_newlines st,v$session se<br />
where st.address=se.sql_address and st.hashvalue=se.sql_hash_value<br />
and se.sid =&amp;wait_sid order by piece;</span></p>
<p>Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/178.html' rel='bookmark' title='表空间使用状况查询'>表空间使用状况查询</a></li>
<li><a href='http://www.dbalife.com/archives/278.html' rel='bookmark' title='undo相关的sql'>undo相关的sql</a></li>
<li><a href='http://www.dbalife.com/archives/101.html' rel='bookmark' title='ORACLE STATSPACK REPORT输出结果说明'>ORACLE STATSPACK REPORT输出结果说明</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.dbalife.com/archives/144.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

