2007-10-01 Mon
I use the following formula to size the minimum number of cores on replacement servers. The formula is based on "used" performance on the installed servers matching "used" performance on the replacement server.
c2 = (u1)(c1)(p1) / (u2)(p2)
Where
c1 = # cores on the installed server
p1 = "performance per core" of the installed server
u1 = % utilization of the installed server
c2 = # cores on the replacement server
p2 = "performance per core" of the replacement server
u2 = % utilization of the replacement server
If consolidating multiple stand-alone servers to micropartitions, sum the replacement cores (c2) required for all the stand-alone servers.
The “performance per core” should be based on a relevant benchmark for your workload. The preferred metric is your application‘s benchmark. In absence of that information, pick an industry benchmark that approximates your work load. Historical and current benchmarks for AIX servers can be found at
http://www-03.ibm.com/systems/p/hardware/system_perf.html
In all cases, you should size for the peak utilization during your peak processing period (daily, “month end“, “seasonal peak“, etc). If the replacement server uses micropartitions, use the aggregate peak utilization. (Note: Servers peak at different times, so the aggregate peak is not the same as the sum of the individual peaks.) A good tool for determining the aggregate peak utilization is Steve Atkin‘s “NMON Consolidator Tool”:
http://www-941.haw.ibm.com/collaboration/wiki/display/WikiPtype/nmonconsolidator
Choosing the CPU “% utilization“ for the replacement server depends on whether its using LPARs or micropartitions. Here are my guidelines for the minimum sizing, with my standard disclaimer: “Your results may vary. Use your best judgement.”
LPARs, Stand-alone Servers, Capped Micropartitions
Size for the peak processing period. Target the replacement server for 90–100%. If peak processing unknown, size the replacement server for an average 30% utilization. Round up to the nearest core.
Uncapped Micropartitions
Size replacement server for the aggregate peak of the installed servers. There is some overhead associated with micropartitioning, so size the replacement server for 80–90% utilization during the aggregate peak..
If aggregate peak is unknown, size the replacement server for the average utilization of the installed servers. Target the replacement server for 50%-70% utilization so it has spare capacity for the peaks.
Round up the shared pool to the nearest core.
Final comment. Micropartitioning has two at least two sizing advantages. Typically it requires half the CPUs as LPARs. And sizing micropartitions is more forgiving. If you size incorrectly, its easy to move resources to where its needed. My experience is that I oversize half the micropartitions and undersize the other half. On the average, the sizing is OK.
Here's a link showing how to use NIM to install VIO servers
http://www-941.ibm.com/collaboration/wiki/display/LinuxP/IBM+VIOS+Installation+over+NIM
Contributed by Celeste O’Connor
Release Found: Red Hat Enterprise Linux 3 and Red Hat Enterprise Linux 4
- Click the schedules link, then the add new schedule link.
- Enter a name for the schedule.
- Click the Add Time Range button.
- Select the days for which this time period is applicable.
- Select the time period.
- Click the Accept button.
- To add another time range, click the Add Time Range button.
- When all the time periods are configured, click Finished: Save Schedule.
Show me how:p>
Click here for a flash demo that outlines the whole process.
2007-09-30 Sun
Author:NinGoo posted on NinGoo.net
折腾了一天,终于将blog系统升级到wordpress2.3中文版。下午一直在看网上的一些升级文章,wordpress2.3由于数据库改动较大,升级可能导致很多插件冲突。所以预先将目前在用的几个插件都先升级好,尤其是Google XML Sitemaps和Extended Live Archives,ELA官方没有更新,请使用网友istef修改的版本。另外,由于wordpress2.3引入了自带的tag系统,原来用的tag插件UTW将无法使用,需要卸载。原来的tag可以通过wordpress提供的导入功能导入到新系统中,方法是,在后台管理中选择管理->导入->Ultimate Tag Warrior,点几下鼠标即可。
升级过程很简单:
第一步:备份数据库。我用的dreamhost主机,最简单的备份方法,一是使用WordPress Database Backup插件备份;另外一种方法就是新建一个mysql库,然后利用dreamhost提供的phpMyadmin将原库复制一份到新库中,注意字符集的选择。
第二步,配置好wp-config.php中的数据库连接信息,然后上传wordpress2.3中文版上传到根目录下,将网站原目录改名,再将新的wordpress2.3的目录改成原来的名字。通过前两步,即使升级失败,也可以方便的切换回旧系统,万无一失。
第三步,执行/wp-admin/upgrade.php升级,点一下鼠标,一秒钟搞定。
第四步,迁移upload的文件,修改模板和插件等。
前面三步都非常简单,也没什么风险。主要是第四步要花比较多的时间。原来相关文章的功能依赖于UTW插件,而wordpress2.3自带的tag系统目前还比较弱智,一是不好管理,二是没有引入根据tag显示相关文章的插件。所以不得不为这两个功能又装上两个新的插件:Advanced Tag Entry用于管理tag,Tag Converter 4 UTW用于显示相关文章。由于tag converter 4 UTW的TC_ShowRelatedPostsForCurrentPost函数采用的直接echo输出相关文章而不是returen的方式,导致Feed中相关文章在最前面显示了,所以还得在tag converter 4 UTW中复制一个TC_ShowRelatedPostsForCurrentPost4Feed函数,将相关文章的字符串return而不是echo。
还有一个问题,就是原来使用ST_AddRelated2Feed插件给Feed输出加上了相关文章,但是这个插件也是基于UTW的,所以需要修改,使用tag convert来获得相关文章。
顺便提一下wordpress2.3自带的tag系统的两个调用函数:the_tags()用于显示某篇文章的tag,wp_tag_cloud()用于显示标签云。两个函数都有大量的参数,可以到/wp-includes/category-template.php中找到函数定义的地方了解具体的参数。
同时将模板的字体从12px调大到14px,虽然看起来没那么整齐了,对眼睛还是有好处的^_^
可能还有些没考虑到的地方,如果大家在浏览本站的时候发现问题,请留言告知,谢谢。
Related Articles
2007-09-28 Fri
Author:NinGoo posted on NinGoo.net
在logzgh的blog上看到《在obj$基表中大量的non-existent类型对象是咋回事?》。这里简单解释下non-existent object和negative dependency。
对于Non-existent object,有两种来源,一种是drop或者rename object留下的,一种则是因为negative dendency机制。在我的试验中,这两种情况实际上都和synonym有关。
第一种情况,对于table,view等对象的drop/rename,我没有试验到non-existent的存在,但是在删除synonym时,可以看到Obj$实际上没有删除该synonym的记录,只是将其type#从5修改成10,也就是变成了non-existent
表已创建。
NING@ ning>grant select on test_synonym to test;
授权成功。
TEST@ ning>create synonym test_synonym for ning.test_synonym;
同义词已创建。
SYS@ ning>select obj#,name,type# from obj$ where name='TEST_SYNONYM';
OBJ# NAME TYPE#
---------- ------------------------------ ----------
44651 TEST_SYNONYM 2
44652 TEST_SYNONYM 5
其中type#=2的是table,type#=5的是synonym
同义词已删除。
SYS@ ning>select obj#,name,type# from obj$ where name='TEST_SYNONYM';
OBJ# NAME TYPE#
---------- ------------------------------ ----------
44651 TEST_SYNONYM 2
44652 TEST_SYNONYM 10
这种情况,在数据库没有重启之前,再次创建该synonym,可以重用obj#,也就是讲type#再修改回来,这样就不会因为不停的删除重建对象导致obj$出现太多的垃圾。重启的时候,这些non-existent应该是由smon清理掉的。
同义词已创建。
SYS@ ning>select obj#,name,type# from obj$ where name='TEST_SYNONYM';
OBJ# NAME TYPE#
---------- ------------------------------ ----------
44651 TEST_SYNONYM 2
44652 TEST_SYNONYM 5
SYS@ ning>shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SYS@ ning>startup
ORACLE 例程已经启动。
Total System Global Area 130023424 bytes
Fixed Size 1247660 bytes
Variable Size 79693396 bytes
Database Buffers 41943040 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
数据库已经打开。
SYS@ ning>select obj#,name,type# from obj$ where name='TEST_SYNONYM';
OBJ# NAME TYPE#
---------- ------------------------------ ----------
44651 TEST_SYNONYM 2
至于第二种情况,则需要解释下什么是negative dependency。
对于一个查询中的对象,oracle是按照以下顺序来解析的:首先是current schema下找相应的对象如table,view或者private synonym,如果还没有就找public synonym,再没有就报ORA-00942了。
而对于依赖其他对象的对象,在被依赖对象出现变更后,可能会失效。这就需要有一种机制来保证oracle能对依赖关系进行跟踪。如果依赖的对象是current schem下的表,视图或者private synonym,则没有什么问题。如果是public synonym,则需要考虑的不仅是public synonym的变更会造成依赖其的对象失效,当依赖其的对象的schema下出现和public synonym相同名称的对象时,oracle应该是优先使用schema的对象,所以也需要使这些对象失效,以便重新解析到表或者视图上,private synonym没有这种问题,因为不允许在schema下出现同名的private synonym和table/view。这种情况下,oracle会在schema下创建一个non-existent对象,然后在该对象上创建一个依赖,如果以后schema下创建了同名的表或者视图,则non-existent对象被修改成实际创建的对象,使得依赖其的对象失效。Non-existent对象上的依赖就是negative denpendency。
上面讲的有些拗口,我自己都看得有点糊涂了,还是举个例子来看,注意不同语句是在不同用户下执行的:
表已创建。
NING@ ning>grant select on test_negative to test;
授权成功。
TEST@ ning>create public synonym test_negative for ning.test_negative;
同义词已创建。
TEST@ ning>create view v_test_negative
2 as
3 select * from test_negative;
视图已创建。
此时,由于test用户下没有叫test_negative的表或者视图,会通过public synonym来解析该对象,则会产生一个non-existent对象和一个negative dependency
OBJ# OWNER# NAME TYPE#
---------- ---------- ------------------------------ ----------
44662 1 TEST_NEGATIVE 5
44661 42 TEST_NEGATIVE 2
44663 43 TEST_NEGATIVE 10
SYS@ ning>select obj#,name,type# from obj$ where name='V_TEST_NEGATIVE';
OBJ# NAME TYPE#
---------- ------------------------------ ----------
44664 V_TEST_NEGATIVE 4
SYS@ ning>select d_obj#,p_obj# from dependency$
2 where d_obj#=44664;
D_OBJ# P_OBJ#
---------- ----------
44664 44663
44664 44662
可以看到,v_test_dependency出现了两个依赖,一个是对owner#为42的ning.test_negative表的依赖,一个则是对OWNER#为43的non-existent的test.test_negative的依赖。
此时,如果在test下创建一个test_negative表,则会使用原来的non-existent的obj#,也就是实际上不会再在obj$中插入记录,只是将原来的non-existent记录的type#从10修改为2,由于obj$记录变更,导致依赖失效,下次再访问该视图时,会重新编译解析到test.test_negative表上。
表已创建。
SYS@ ning>select obj#,owner#,name,type# from obj$ where name='TEST_NEGATIVE';
OBJ# OWNER# NAME TYPE#
---------- ---------- ------------------------------ ----------
44662 1 TEST_NEGATIVE 5
44661 42 TEST_NEGATIVE 2
44663 43 TEST_NEGATIVE 2
NING@ ning>insert into test_negative values(10);
已创建 1 行。
NING@ ning>commit;
提交完成。
TEST@ ning>select * from v_test_negative;
未选定行
参考:
http://www.jlcomp.demon.co.uk/faq/non_exist.html
http://www.ixora.com.au/q+a/library.htm
Related Articles
AnySQL.net
DBA notes
Oracle & Starcraft
eagle's home
给你点color see see
AnySQL.net English
Oracle Scratchpad
Oracle Life
OracleDBA Blog
Photos from dbanotes
Chanel [K]
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
车东[Blog^2]
blue_prince
玉面飞龙的BLOG
此生 今世
人生就是如此
Orange Tiger 木匠 的 移民生活
生活帮-LifeBang
Hey!! Sky!
dba on unix
Oracle Notes Wiki
Welcome to brotherxiao's Home
柔嘉维则@life.oracle.eng
Fenng's shared items in Google Reader
jametong's shared items in Google Reader
Tanel Poder's blog: Core IT for geeks and pros
DBA Tools
DBA is thinking
NinGoo@Net