Tip: 看不到本站引用 Flickr 的图片? 下载 Firefox Access Flickr 插件 | AD: 订阅 DBA notes -- ![]()
2008-07-09 Wed
Author:NinGoo posted on NinGoo.net
在计算机和网络的世界里,缓存无处不在,从CPU的寄存器到一级缓存二级缓存,从硬盘的文件到阵列卡的缓存到文件的缓存,从浏览器的缓存到web服务器的缓存到数据库的缓存,Cache is King。
Memcached是一个分布式的内存缓存系统,在很多大型网站中都有成功的应用案例。设计思想说起来也很简单,服务器端保存精悍而独立,基本上就是一个slab对象缓存管理器,而在客户端实现负载均衡,采用hash算法来选择不同的服务端缓存key-value数据。
Fotolog的Frank同学最近在MySQL官方网站上做了一个Memcached结合MySQL应用的webinar:
Related Articles
PermLink: http://www.ningoo.net/html/2008/memcached_and_mysql_use_cache.html
One of our customers was setting up box for MySQL LVM backups. The box had 2 RAID volumes (internal drives and enclosure) with database being stored on enclosure drives and internal drives used pretty much for OS and logs (database grew too large and so was moved to enclosure completely).
As database was large and active I thought it would make sense to have LVM undo space located on the internal drives so LVM and backup has less backup on the running system.
As the system was configured creating snapshot volume with 100G of undo space failed complaining there is not enough space available on the volume….
The problem was internal and external volumes were configured as different “volume groups”. Volume groups in LVM live completely isolated life and you can’t use space from one volume group for snapshot for another.
What should have done instead is creating single volume group and having RAID volumes as physical volumes.
If you also have done such mistake there is vgmerge command which allows to merge volume groups together without data loss. (Though I took backup anyway just to be on the safe side)
P.S That would be interested to benchmark one day how LVM performs in shapshot mode in case undo space is stored on the same device vs different device.
Entry posted by peter | No comment
几则新闻。名人vs大众,专业vs业余,拉动效应。
Last.fm Starts Paying Royalties to Unsigned Bands(Read/Write Web)
另一则(from 任悦):
getty和flickr刚刚签署了一项协议,getty的图片编辑将从flickr里挑选合适的摄影师,然后向他们发出邀请,这些人可以成为getty的签约摄影师。这不就是把flickr当作一个摄影选秀活动嘛。flikr-getty摄影师即将诞生。
comment
版权声明:可以在网上任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明文字。
作者:shunz,原文链接:http://shunz.net/2008/07/nginx_log_rotation.html
Nginx是一款采用Linux 2.6内核epoll新机制开发的Web服务器软件,能极大地提高Web访问特别是小文件访问的I/O性能,是c10k问题的一个解决方案。有测试称Nginx比Apache效率提高10倍,而从我自己上次的测试来看,其并发性能确实比Apache强不少。Nginx以短小精悍著称,所以虽然一些web核心功能他都支持得挺好,但是一些扩展功能却还不能支持,比如Nginx目前就还不支持通过pipe输出log,所以就不支持利用cronolog来按时间进行日志截断回滚。下面提供一种替代解决方案:
#!/bin/sh
log_dir=”/var/log/httpd”
yesterday=`date +%Y%m%d`
lastday =`date +%Y%m%d -d ‘-1 month’`
/bin/rm ${log_dir}/access.${lastday}.log
/bin/rm ${log_dir}/error.${lastday}.log
/bin/mv ${log_dir}/access.log ${log_dir}/access.${yesterday}.log
/bin/mv ${log_dir}/error.log ${log_dir}/error.${yesterday}.log
kill -USR1 `cat /var/run/nginx.pid`
/bin/gzip ${log_dir}/access.${yesterday}.log &
/bin/gzip ${log_dir}/error.${yesterday}.log &
然后将该脚本保存在/etc/cron.daily目录里,或者在crontab里每日0点时运行。
另外,还可以结合awstats进行日志分析,这里就不详细说了,可以参考车东的相关文章。
相关网志
- Nginx的Rewrite设置及示例
- 百万记录级MySQL数据库及Discuz!论坛优化
- apache+mod_ssl中证书生成方法
- Apache+Subversion安装笔记
- 匿名盗抓的Baidu Spider
- 今天为Firefox抓狂!
- apache 2.0 中文手册学习
- apache的静态/动态编译在apache+php+mysql+gd中的应用
- 关于apache的rewrite应用
( 全文完 )
© shunz , BLOG家园 , 2008 | Nginx的日志回滚 | 3条留言
添加到 del.icio.us | Technorati 反向链接 | 阅读更多【学习笔记】
Before installing an update, make sure all previously released errata relevant to the system have been applied.
To use Red Hat Network (RHN) from Red Hat Enterprise Linux 2.1, 3, or 4, launch the interactive Red Hat Update Agent with the command:
# up2date
To find more information about the command line options available for up2date, use the command:
# man up2date
To use Red Hat Network (RHN) for Red Hat Enterprise Linux 5, launch the graphical Update tool with the command:
# pup
Alternatively, for a command-line interface, use the command:
# yum update
To find more information about the command line options available for yum, use the command:
# man yum
今天,一个做电视节目的人找到我,让我谈“秦始皇兵马俑定性”事件。这件事说来话长,2004年我去西安采访,知道有个叫陈景元的人,质疑兵马俑定性,并且一直不依不饶30年,非要给兵马用定性翻案。
当时兵马俑定性很有意思,先是一个记者发现了秦代武士俑,然后说是秦始皇的兵马俑,当时中央正在搞阶级斗争,江青老师评法批儒,把兵马俑跟秦始皇拉在一起可以成为她的资本,称之为“秦始皇兵马俑”总比称“别的兵马俑”更让她有力。但问题是,当时还没挖出几个陶俑呢,就草率定性。并且,这么一定性,就成了政治事件,那就不能乱改了。在后来相当长的时间里,在没有任何直接证据证明这些兵马俑跟秦始皇有关系的前提下,专家们都当成了秦始皇的兵马俑去研究,并且因此出现了一批“俑学家”,至今也没有什么有力的证据证明这堆武士跟秦始皇有关系。你总不能说——因为气势庞大,只有秦始皇老师才有魄力和资格建筑这么一个俑群,别人都没资格。如果研究学术都可以跟小说家那样肆意想象,那我早成历史学家了。不就是尽量遏制自己的想象力,我的博客才叫不许联想的。
说兵马俑这件事,是想说明另一件事,就是李树芬同学尸检报告,贵州有关部门真重视这件事,这个小女孩尸检了三次,以前你还听说过谁享受过这样待遇?在第二次尸检之后,我“预测”第三次跟第二次一样。事实也一样。
我没什么预见性。我的唯一判断就是这次事件是因为验尸引起争议,才导致骚乱的。如果验尸结果万一是被强奸溺死,那么群众的暴动就是理直气壮的了,再往黑社会身上栽赃就不合逻辑了。
看清楚,我说的是“如果验尸结果万一是被强奸溺死”,就是说存在“被强奸溺死”这个可能。之后当地领导在新闻发布上的表现有点愚弄全国人民的智商,更让公众起疑心,至今这孩子的死因都没查清楚,一个15岁的孩子莫名其妙说死就死,跟刘胡兰一样,也太大义凛然了吧?总不能跟中国足球队突然死亡那样合乎常理吧?
再假如,当李树芬死后,公安局的同志如果能认真对待此事,认真验尸,什么样结果大家都能接受。等事态闹大了,事件定性了,然后三番五次尸检,好像目的不是为了寻求真相,而是为了平息众怒。这我就怀疑检验结果的真实性了。这样的尸检再来一百次肯定也一个样。
与此同时,贵州省拿下了公羽安县几位领导,实际上也是向公众表明一种姿态,这帮人腐败之极。那么,这个逻辑就变得有趣了。既然死者的死因跟当地领导无关,既然是黑恶势力捣乱,平息了这场骚乱,维护了社会稳定,他们应该有功,怎么都被拿下了呢?表面上是平民愤了,实际上回避的很多问题。如果这样的话,我相信在全国很多地方都存在类似公羽安县的腐败,是不是当地民众闹一闹,把政府大楼一把火烧了就能让这些腐败官员下课?是不是这种“公羽安模式”值得在全国推广?这样不就乱套了吗。
我想说的是,可能兵马俑就是秦始皇老师生前埋下去的,但在那个特殊历史背景下,被文艺青年江青老师利用了,考古鉴定变成了政治鉴定,先下结论再求证。同样,可能李树芬就是一时想开了举身赴清池,跟领导的儿子或者黑恶势力八竿子打不着,但是地方政府的诚信度让人无法相信这一结果,这个悲剧闹到现在有点像喜剧了。
今天一个QQ朋友告诉我,他的数据库有点问题,’Checkpoint not complete’。我叫他ALTER文件传过来,下面是我的一些分析:
1:日志切换太频繁,几乎是1分钟不到,就切了(还是归档模式,50M一个)。建议加大日志组成员,另建议问问开发,到底在跑什么?因为晚上11点的LOG,还是很频繁;
2:他说查询很慢,我看了ALTER文件,发现才1.1G的SGA,data buffer就1G,但是PGA倒是有400多M,
如果内存不多的话,还不如PGA小点,多给点databuffer.
我不相信,他的数据库命中率有100%,估计也不可能,因为写日志太频繁了,根据LRU来说,总是有写data buffer要换进换出。
PS:因为我只看到了ALTER文件,所以只能这样定性了。人家没给STATSPACK。
好像有点武断的成分,但是确实也只能这样了。
面对不断变化的IT技术,如何能够既要保证从容有度,与时俱进?又要避免狗熊掰棒子,浪费精力,让我们一无所获,两头挨巴掌?
用户需要有成熟、稳定、可用的软件,不会太care你的技术。
这个最低的要求,我们也很难满足。
Web2.0的风潮来了好长的时间,却对于开发企业软件的开发人员来说,似乎无动于衷,最多知道几个名词,掌握一点ajax的技术。
一些人极力将企业软件和互联网应用划清界限,我们设计企业软件是..?
仍然是单板的导航设计,
仍然是点击N次,靠着厚厚的用户说明手册指引,才看到自己最关心的内容,最后发出感叹,我操!原来还有这么个功能!。
仍然是蹩脚的alert。
仍然是粗鄙不堪的操作界面。
用户用的不爽的时候,仍然是沿用者老套、低效的反馈机制。
我们测试时,光功能性的bug, 都迎接不暇,别说有针对性的可用性测试。
但是我们的技术的确在像走马灯一样变化,struts1, struts2, freemarker, hibernate, ibatis, ejb2, spring, seam, ejb3, ESB.
那我们自问,学习技术的目的是做什么?
1)有一个好的就业机会
2)Productivity 。
3)用户体验
4)其他
注意这是个排序,用户? who cares!
第一个,很正常,现在招个爱学习的开发人员,很不容易,应该鼓励。但方向要正确,浪费时间比浪费money更要命。
重点说一下第二个。
不管技术新不新,我们从未知到已知,是一个学习曲线,有高有低,如果是团队的群体行为,有的人掌握的好,有的人差。不管怎样,第一次,总是痛并快乐着。有是代价会很高,我们需要做衡量值不值。
我经历过delphi的VCL,OWL, VC的MFC, AWL,到BS时代的MVC框架,struts1到2,spring, hibernate,ibatis。
我的观点是,技术上注重积累,成熟的技术和不断积累的知识、资源,庞大的用户群和强大的开发社区,才是提高productivity的根源。
只有能够从开发思想的层面上改变的技术,才值得去学习。
我观察到,有两个C(continuous和contribution)机制的技术框架、平台、应用,总是能够在短时间内,超越其他同类竞争,爆发出很大的能量,同时潜力也不可低估。
举几个例子:
1)首推PHP中的word press, 几年了,数不清的plug-ins,其之所以紧跟潮流,就在于不断有新的开发社区contribute的blug-in产生。每个产品经理,都应当把word press作为一个现象来研究。类似想wordpress学习的商业软件产品公司有,Sugar CRM, Salesforce等,都是靠社区生存的。
2)eclipse. 同样是基于plug-in的平台,有多少开源的、商业的组织、团队、商业公司在contribute,围着它打转转.
3) spring, container的概念,可以包容、聚合很多的开发资源、技术。有人仅仅应为XML configuration的一点不爽,就把google的guice 推上了天,做人,做技术,格局都要大,不能只看一点。用过spring的人,恐怕很少有人能代表团队说,俺们不准备在下一个版本、项目、产品中试用了。
4)jquery, 这个用了好久,谁用谁知道!不算官方的,光社区提供的好用的plug in,就有几百个,当然这个不是jquery最主要的优点,但是contribution的威力,不容小视。
所以技术,还在于我们去孵化、成熟后,持续improve才能爆发出威力,如果我们不断的change,其实得不偿失,如果你是一心想做一个好的产品、项目,你会发现,有时换技术,就像足球换教练,解决不了问题,意识跟不上,换什么都不行。
同类的change,要慎重,如struts2 到 spring的MVC ,prototype 变到 jquery, struts2 到seam.
现在有人说seam适合企业级开发,这个很片面,如果你在struts2上没有积累,换什么都没有积累,如果你很成熟,换到seam的代价会比较大。特别是前端技术,因为seam扼杀了前端, 回避前端是错误的,及其错误的,普元那些害人不浅的构件开发,已经证明了世上没有永动机。
这是个方向的问题,技术的重心会从server端移到client, 用户体验的时代已经来了,很多公司对前端开发非常重视,美工将被边缘化,很多的项目已经不要美工了,会CSS、DHTML、javascript的前端工程师,很吃香,而seam恰恰扼杀了前端,大便一样的tag, 并不会提高什么效率,当需求变化时,冲击到界面的设计时,你会很痛苦。我们不仅要考虑到第一次很爽,更要想到应对变化是所需要的灵活。
JSF整个就是一个魔鬼,你有时间学习他们, 为什么不去学习更容易、更灵活的前端的技术?你会发现,自己的思路会更开阔。很多的东西,根本不用server来实现,或者和server灵活结合,就可以达到以前要大量开发的东东,例如Jquery的基于behaviour与structure分离的技术,让页面很简洁,很容易看清页面的结构。
我的策略是,技术是基础,积累才能提高,用户是目的。成熟的架构+创新的扩展,server端,团队应当继续构建、成熟以spring为基础的企业应用开发平台,深度挖掘、孵化、封装,同时将精力转向客户端。努力实现客户端与server端的粘合剂开发提高开发效率,建议的平台是spring + jquery.
顺比说一下,silverlight2.0 出来了,Actionscript3.0也出来了,现在RIA技术争论的焦点是flex vs silverlight. 习惯与写java累的程序员,已经落后太多了,赶快去了解一下更广阔的天空吧。
Author:NinGoo posted on NinGoo.net
继续上一篇的话题,介绍mysql命令行的一些小技巧。
1.以html格式输出结果
使用mysql客户端的参数–html或者-T,则所有SQL的查询结果会自动生成为html的table代码
$ mysql -uroot --html Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3286 Server version: 5.1.24-rc-log MySQL Community Server (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> select * from test.test; <TABLE BORDER=1><TR><TH>i</TH></TR><TR><TD>1</TD></TR><TR><TD>2</TD></TR></TABLE> 2 rows in set (0.00 sec)
2.以xml格式输出结果
跟上面差不多,使用–xml或者-X选项,可以将结果输出为xml格式
$ mysql -uroot --xml
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3287
Server version: 5.1.24-rc-log MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> select * from test.test;
<?xml version="1.0"?>
<resultset statement="select * from test.test;"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<row>
<field name="i">1</field>
</row>
<row>
<field name="i">2</field>
</row>
</resultset>
2 rows in set (0.00 sec)
3.修改命令提示符
使用mysql的–prompt=选项,或者进入mysql命令行环境后使用prompt命令,都可以修改提示符
mysql> prompt \u@\d> PROMPT set to '\u@\d>' root@(none)>use mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed root@mysql>
其中\u表示当前连接的用户,\d表示当前连接的数据库,其他更多的可选项可以参考man mysql
Related Articles
PermLink: http://www.ningoo.net/html/2008/mysql_cmdline_html_xml_prompt.html
In part 1, we reviewed HTTPURIType and DBURIType. Let’s now go over a few examples of more advanced XML using the SQL functions XMLTable and XMLQuery, Oracle’s native support for XQuery.
SQL functions XMLQuery and XMLTable are defined by the SQL/XML standard as a general interface between the SQL and XQuery languages. XMLQuery and XMLTable let you take advantage of the power and flexibility of both SQL and XML. Using these functions, you can construct XML data using relational data, query relational data as if it were XML, and construct relational data from XML data.
Let’s query blog titles from the OraNA.info RSS feed without using XQuery:
SQL> SELECT value(i).extract('/item/title/text()'
2 ,'xmlns:dc="http://purl.org/dc/elements/1.1/"' ).getstringval() title
3 FROM TABLE (XMLSequence(
4 HTTPURITYPE('http://feeds.feedburner.com/orana').getxml().extract('//item'))) i;
TITLE
--------------------------------------------------------------------------------
Oracle ANZ Blogosphere Highlights
Taking the Plunge: Part 2
8 Things about Louise
Working with PHP and Oracle Presentation
Removing Oracle Database XE from Linux
...
Starting with Oracle database 10gR2 you have the option to use the XQuery SQL function XMLTable. You use XMLTable to shred the result of an XQuery-expression evaluation into the relational rows and columns of a new, virtual table. You can then insert the virtual table into a pre-existing database table, or you can query it using SQL. You use XMLTable in a SQL FROM clause.
Let’s change the query above to use XMLTable and return the blog author as well:
SQL> SELECT *
2 FROM XMLTable (
3 '//item'
4 passing HTTPURITYPE('http://feeds.feedburner.com/orana').getXML()
5 COLUMNS title varchar2(4000) path '/item/title/text()',
6 creator varchar2(4000) path
7 '/item/*[namespace-uri()="http://purl.org/dc/elements/1.1/"
8 and local-name()="creator"]/text()'
9 );
TITLE CREATOR
---------------------------------------- --------------------
Oracle ANZ Blogosphere Highlights Carl Terrantroy
Taking the Plunge: Part 2 Jake
8 Things about Louise Louise Barnfield
Working with PHP and Oracle Presentation alison.holloway
Removing Oracle Database XE from Linux alison.holloway
...
And here is another example that selects the entries from the Oracle room on FriendFeed:
SQL> SELECT *
2 FROM XMLTable (
3 '/feed/entry'
4 passing HTTPURIType ('http://friendfeed.com/api/feed/room/oraclestuff?format=xml').getXML()
5 columns title varchar2(4000) path 'title/text()'
6 );
TITLE
----------------------------------------
Oracle ECM and Skywire Database modeling support in SQL Developer
Oracle Fusion Middleware Strategy Webcast Replay
...
You can also use the XQuery function ora:view within an XQuery expression to query a relational table or view as if it were XML. Here is a simple example using the table we created in part 1:
SQL> SELECT *
2 FROM XMLTable(
3 'for $i in ora:view("t")
4 return $i');
COLUMN_VALUE
---------------------------------------
<ROW><A>1</A><B>Eddie</B></ROW>
<ROW><A>2</A><B>John</B></ROW>
...
The other XQuery function is XMLQuery. You use it to construct or query XML data. This function takes as arguments an XQuery expression, and an optional XQuery context item. The context item establishes the XPath context in which the XQuery expression is evaluated. Additionally, XMLQuery accepts as arguments any number of SQL expressions whose values are bound to XQuery variables during the XQuery expression evaluation. The function returns the result of evaluating the XQuery expression, as an XMLType instance.
Here are a couple of simple examples:
SQL> SELECT XMLQuery('(100 to 105)'
2 RETURNING CONTENT) AS output
3 FROM DUAL;
OUTPUT
-------------------------------------------------
100 101 102 103 104 105
SQL> SELECT XMLQuery('for $i in ora:view("t")
2 return <ROWS>{$i}</ROWS>'
3 RETURNING CONTENT) AS col
4 FROM DUAL;
COL
---------------------------------------------------
<ROWS><ROW><A>1</A><B>Eddie</B></ROW></ROWS><ROWS><
The above examples give you a “taste” of the capabilities of XQuery in Oracle. For more detailed information please refer to the following list of resources:
- Using XQuery with Oracle XML DB
- Oracle XML DB Developer’s Guide
- XQuery on WikiPedia
- What bloggers are saying about XQuery
---
Related Articles at Eddie Awad's Blog:
- XML Goodness in SQL - Part 1
- Anonymous annoyance now a crime
- Oracle PL/SQL package initialization
- iPhone and iPod Touch Version of OraNA.info
- Are you experiencing the blogger burnout?
最近我管的数据库,上了一套新的系统:《工作流引擎――JBPM》。表上使用了一种很孤僻的类型: RAW。
开发就是把一个对象直接存入到DB里了,额的神啊。。。。这样设计上是方便了,DB这边就不方便了啊。说实话,用不用RAW类型,Donny和我最最关心的还是数据本身的存储,担心RAW和LOB类型的字段一样,存储在别的Segment上。验证了下一下,这种担心不必了。验证如下:
@>SELECT DISTINCT segment_type FROM user_segments;
SEGMENT_TYPE
——————
INDEX
TABLE
@>desc JBPM_BYTEBLOCK
Name Null? Type
———————————————————————————– ——– ——————————————————–
PROCESSFILE_ NOT NULL NUMBER(19)
BYTES_ RAW(1024)
INDEX_
BUG BUG满天飞,真是爽.
举两小例子
1:2 node的RAC,其中一个node上查询某个表,报00942,从dba_tabels中看这个表状态为valid,从另外一个node查询,一切正常.
2:4G的shared pool,啥都没干,负载基本等于0,不停的报4031,牛的.
继续和bug做斗争.
2008-07-08 Tue
2008-07-07 Mon
AnySQL.net
DBA notes
Oracle & Starcraft
eagle's home
Give you some color to see see!
AnySQL.net English
Oracle Scratchpad
Oracle Life
OracleDBA Blog---请享受无法回避的痛苦!
Uploads from dbanotes
Chanel [K]
xzh2000的博客
Oracle Security Blog
ERN空间
Eddie Awad's Blog
MySQL Performance Blog
The Tom Kyte Blog
del.icio.us/fenng/oracle
AIXpert
O'Reilly Databases
Red Hat Magazine
DBASupport
DB2 Magazine 中文版
developerWorks 中国 : 技术文章 , 教程 AIX
Pythian Group Blog » Log Buffer
车东[Blog^2]
blue_prince
玉面飞龙的BLOG
此生 今世
人生就是如此
Orange Tiger 木匠 的 移民生活
生活帮-LifeBang
Hey!! Sky!
dba on unix
Oracle Notes Wiki
Brotherxiao's Home
柔嘉维则@life.oracle.eng
Fenng's shared items in Google Reader
jametong's shared items in Google Reader
缥缈游侠-logzgh
Tanel Poder's blog: Core IT for geeks and pros
DBA Tools
ilonng
yangtingkun
NinGoo@Net
Oracle & Unix
Inside the Oracle Optimizer - Removing the black magic
Ricky's Test Blog
DBA@Taobao
存储部落
Think in 88
Alibaba DBA Team
Oracle Team @SNC
淘宝数据仓库团队
OracleBlog.cn







