有意思的RAC优化讨论
RAC优化
“因OLTP主要利用的技术是使不同的会话分担在不同的节点,通过优化,要使RAC节点之间的通讯最少,越少越好,这样在节点之间发生冲突的可能性就降低了。
我们可以把不同城市的订单放在不同的节点上去,这时候访问不要去用动态的负载均衡,用了负载均衡之后,不知道负载到哪个节点去了,可能CPU是闲了,
但是要等另一节点传数据块。如果会话之间老是访问同一个数据块,有些热点块的话,要把数据块分散开,尽量要把相关联的会话放到同一个节点上去。”
问题: 这样的话,是不是只要使用统一的RAC服务名(类似于devdb,而不是实例名devdb1,devdb2),然后关闭负载均衡. 这样就可以做到相关联的会话被放至
同一个节点上去。请问是不是这样?
如果不是的话,应该怎么样做才能保证即能做到自动failover,又能做到把相关联的会话放至同一个节点.
lfree:
对应用分割,比如财务在节点一,其它在节点2.
减少内网的流量,
同时像单机一样要优化好sql,减少逻辑读.
rollingpig:
最主要是tns的设置。
address_list李写多个IP, 然后
load_balance=off
QUOTE:
原帖由 gy1982329 于 2008-10-24 16:42 发表
同样认为,rac的均衡负载你不用,还选rac做什么!
Kamus :
RAC的均衡负载只是其中的一个功能,如果你自信自己的应用SQL优化的足够好,机器足够强劲,能够cover住interconnect中的数据传输和gc锁的性能消耗,
那么当然你可以简单的选择负载均衡。
这里讨论的思路是:
如果你想要自己的RAC跑的更好,那么需要应用上予以配合,就是将不同的应用有策略有计划的分布到不同的节点上。至少我们可以简单地选择将查询业务和
更新业务分布到不同的节点上。
此时,为什么要选择RAC?
1. 数据共享。像棉花糖说的那种分成多个数据库,那这多个数据库之间的数据同步是不是要考虑?是不是要自己去实施?
2. 高可用。
当一个节点down掉,通过TAF或者failover的配置,可以将原来的查询业务或者更新业务转到还存活的节点上去运行,虽然性能可能下降,但是至少业务还是可能正常运行的。这种failover的时间远小于分成单独数据库的环境中的failover时间。
数据库版本升级,单实例数据库 的升级怎么都需要down机时间吧,但是对于RAC环境我们可以选择rollingup的升级方式,down机时间几乎可以忽略。
lxz3000:
我的初步写法,ha是两个节点都有的服务,另外注意addresslist的前后顺序,一般情况下,这两个ip只有前一个起效,
如果你在你的客户端的hosts中加上
192.168.0.1(你的ip1) racdb1(节点计算机名)
192.168.0.2 racdb2
你会发现神奇的效果,就是即使你的addresslist乱排序,或者甚至第一个连接不要racdb1,只提供racdb2,oracle
客户端都可以根据service_name&instance_name去找到racdb1这个主机。
TAF51 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = racdb1)(PORT = 1526))
(ADDRESS = (PROTOCOL = TCP)(HOST = racdb2)(PORT = 1526))
)
(CONNECT_DATA =
(SERVICE_NAME = ha)
(INSTANCE_NAME = db1)
(FAILOVER_MODE =
(BACKUP = TAF52)
(TYPE = select)
(METHOD = basic)
(RETRIES=30)
(DELAY=10)
)
)
)
TAF52 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = racdb2)(PORT = 1526))
(ADDRESS = (PROTOCOL = TCP)(HOST = racdb1)(PORT = 1526))
)
(CONNECT_DATA =
(SERVICE_NAME = ha)
(INSTANCE_NAME = db2)
(FAILOVER_MODE =
(BACKUP = TAF51)
(TYPE = select)
(METHOD = basic)
(RETRIES=30)
(DELAY=10)
)
)
)
以上是我刚引入的,并且上个周已经发挥作用了,以前产线停30分钟,这次10秒就自动切换了,不用人为干预。
回复 #22 wxy0327 的帖子
差不多!关键是instance_name/service_name指定的内容!
我是根据文档中讲的作的,并且前两周2号节点早上4点down了,产线只是感觉到10秒左右的停顿,
以前可是人去切换的,好多点,要花几十分钟。
参考网页:
http://www.itpub.net/viewthread.php?tid=1002673&extra=&page=3
http://blog.youkuaiyun.com/wzy0623/archive/2008/10/24/3137235.aspx
RAC优化
“因OLTP主要利用的技术是使不同的会话分担在不同的节点,通过优化,要使RAC节点之间的通讯最少,越少越好,这样在节点之间发生冲突的可能性就降低了。
我们可以把不同城市的订单放在不同的节点上去,这时候访问不要去用动态的负载均衡,用了负载均衡之后,不知道负载到哪个节点去了,可能CPU是闲了,
但是要等另一节点传数据块。如果会话之间老是访问同一个数据块,有些热点块的话,要把数据块分散开,尽量要把相关联的会话放到同一个节点上去。”
问题: 这样的话,是不是只要使用统一的RAC服务名(类似于devdb,而不是实例名devdb1,devdb2),然后关闭负载均衡. 这样就可以做到相关联的会话被放至
同一个节点上去。请问是不是这样?
如果不是的话,应该怎么样做才能保证即能做到自动failover,又能做到把相关联的会话放至同一个节点.
lfree:
对应用分割,比如财务在节点一,其它在节点2.
减少内网的流量,
同时像单机一样要优化好sql,减少逻辑读.
rollingpig:
最主要是tns的设置。
address_list李写多个IP, 然后
load_balance=off
QUOTE:
原帖由 gy1982329 于 2008-10-24 16:42 发表
同样认为,rac的均衡负载你不用,还选rac做什么!
Kamus :
RAC的均衡负载只是其中的一个功能,如果你自信自己的应用SQL优化的足够好,机器足够强劲,能够cover住interconnect中的数据传输和gc锁的性能消耗,
那么当然你可以简单的选择负载均衡。
这里讨论的思路是:
如果你想要自己的RAC跑的更好,那么需要应用上予以配合,就是将不同的应用有策略有计划的分布到不同的节点上。至少我们可以简单地选择将查询业务和
更新业务分布到不同的节点上。
此时,为什么要选择RAC?
1. 数据共享。像棉花糖说的那种分成多个数据库,那这多个数据库之间的数据同步是不是要考虑?是不是要自己去实施?
2. 高可用。
当一个节点down掉,通过TAF或者failover的配置,可以将原来的查询业务或者更新业务转到还存活的节点上去运行,虽然性能可能下降,但是至少业务还是可能正常运行的。这种failover的时间远小于分成单独数据库的环境中的failover时间。
数据库版本升级,单实例数据库 的升级怎么都需要down机时间吧,但是对于RAC环境我们可以选择rollingup的升级方式,down机时间几乎可以忽略。
lxz3000:
我的初步写法,ha是两个节点都有的服务,另外注意addresslist的前后顺序,一般情况下,这两个ip只有前一个起效,
如果你在你的客户端的hosts中加上
192.168.0.1(你的ip1) racdb1(节点计算机名)
192.168.0.2 racdb2
你会发现神奇的效果,就是即使你的addresslist乱排序,或者甚至第一个连接不要racdb1,只提供racdb2,oracle
客户端都可以根据service_name&instance_name去找到racdb1这个主机。
TAF51 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = racdb1)(PORT = 1526))
(ADDRESS = (PROTOCOL = TCP)(HOST = racdb2)(PORT = 1526))
)
(CONNECT_DATA =
(SERVICE_NAME = ha)
(INSTANCE_NAME = db1)
(FAILOVER_MODE =
(BACKUP = TAF52)
(TYPE = select)
(METHOD = basic)
(RETRIES=30)
(DELAY=10)
)
)
)
TAF52 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = racdb2)(PORT = 1526))
(ADDRESS = (PROTOCOL = TCP)(HOST = racdb1)(PORT = 1526))
)
(CONNECT_DATA =
(SERVICE_NAME = ha)
(INSTANCE_NAME = db2)
(FAILOVER_MODE =
(BACKUP = TAF51)
(TYPE = select)
(METHOD = basic)
(RETRIES=30)
(DELAY=10)
)
)
)
以上是我刚引入的,并且上个周已经发挥作用了,以前产线停30分钟,这次10秒就自动切换了,不用人为干预。
回复 #22 wxy0327 的帖子
差不多!关键是instance_name/service_name指定的内容!
我是根据文档中讲的作的,并且前两周2号节点早上4点down了,产线只是感觉到10秒左右的停顿,
以前可是人去切换的,好多点,要花几十分钟。
参考网页:
http://www.itpub.net/viewthread.php?tid=1002673&extra=&page=3
http://blog.youkuaiyun.com/wzy0623/archive/2008/10/24/3137235.aspx