前台公司log放什么位置驾驶室座椅最合适位置

鼎力前台简单操作方法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
鼎力前台简单操作方法
上传于||文档简介
&&鼎​力​前​台​简​单​操​作​方​法
阅读已结束,如果下载本文需要使用2下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩18页未读,继续阅读
你可能喜欢当前位置:
德勤会计事务所前台LOG图片
&&&&星级:
编号:上传时间:大小:0.156 M
尺寸:0×0像素 格式:CDR (X3)颜色:CMYK
扫一扫,下载知聊
关&键&词:天河城 德勤 会计 事务所 前台 LOGO 最终图
设计 广告设计 LOGO设计
图片描述:
&昵图网所有作品均是用户自行上传分享并拥有版权或使用权,仅供网友学习交流,未经上传用户书面授权,请勿作他用。若您的权利被侵害,请联系 。
商用正版图片欢迎访问, 您的支持就博主前进的动力.
Centos6.3下利用rsyslog+loganalyzer+mysql部署日志服务器
作为一名系统运维工程师,平时查看分析LINUX系统日志我觉得是我们每天必做的功课,但时间长了会发现每次查看站点日志都得挨个进后台,几台服务器还可以这么对付,但如果管理成百上千台线上服务器,这种方法就捉襟见肘了。
后来想了想能不能有一台日志服务器集中管理日志,并以WEB形式将日志显示到前台方便查看,顿时码字的想法油然而生,呵呵。
本人有一个习惯,那就是会把群里或者网上看到的圈内比较认可的LINUX系统软件先保存在备忘录,等闲下来研究研究,刚好前段时间有位朋友提到rsyslog+loganalyzer集中管理日志,所以今天刚好就抽空研究了下,过程虽有曲折(网上的文档各种坑跌),最后还是利用一天时间搞定,将自己的理解分享给搭建,仅供参考。
本文档是利用rsyslog+loganalyzer+mysql将网内所有LINUX服务器的系统日志集中到日志服务器进行管理,所有日志会保存在mysql数据库表中
注:loganalyzer在获取客户端日志会有两种保存模式,一种是直接读取客户端/var/log/目录下的日志并保存到服务端该目录下,一种是读取后保存到日志服务器数据库中,本文档推荐后者
解决方案:
一.环境部署
操作系统: & & & &centos6.3 x64
rsyslog: & & & & &系统默认yum源
loganalyzer: & & &loganalyzer-3.6.3 &
LAMP: & & & & & &&httpd-2.4.4,mysql-5.6.10,php-5.4.13
rsyslog server: 192.168.7.201 & &
rsyslog client: 192.168.7.74 & &
1.安装LAMP环境
本博传送门:
2.关闭iptables和SELINUX
# service iptables stop
注:这里若要开启iptables服务增加系统安全性
服务端需添加rsyslog UDP 514端口以及loganalyzer TCP 80端口通过规则
# iptables -A INPUT -p udp &--dport 514 -j ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -A INPUT -p TCP --dport 80 -j ACCEPT
客户端只需添加OUTPUT通过规则
#&iptables -P OUTPUT ACCEPT
从规则可见,rsyslog server端为被动获取数据,client端为主动发送数据
关闭iptables的朋友可以无视。。
# setenforce 0
# vi /etc/sysconfig/selinux
---------------
SELINUX=disabled
---------------
3.同步时间
# ntpdate asia.pool.ntp.org
二.安装配置rsyslog
(rsyslog server)
# yum install rsyslog rsyslog-mysql -y
注:rsyslog-mysql为rsyslog将日志传送到mysql数据库的一个模块,这里必须安装
# cd /usr/share/doc/rsyslog-mysql-5.8.10/
# mysql -uroot -p123456 & createDB.sql
注:这里导入数据库操作其实博主最后研究了下,就是创建了Syslog库并在该库中创建了两张空表
创建rsyslog用户在mysql下的相关权限
# mysql -uroot -p123456
& grant all privileges on Syslog.* to rsyslog@localhost &identified by "123456";
配置服务端支持rsyslog-mysql模块,并开启UDP服务端口获取网内其他LINUX系统日志
# vi /etc/rsyslog.conf
在#### MODULES ####下添加这两行
------------------
$ModLoad ommysql.so &
*.*:ommysql:localhost,Syslog,rsyslog,123456
------------------ &
注:localhost表示本地主机,Syslog为数据库名,rsyslog为数据库的用户,123456为该用户密码
取消下面三行注释
-----------------
$ModLoad immark &
$ModLoad imudp
$UDPServerRun 514
-----------------
重启服务:
# service rsyslog restart
(rsyslog client)
#&yum install rsyslog -y
配置rsyslog客户端发送本地日志到服务端
# vi /etc/rsyslog.conf
末行添加如下内容
-------------------
*.* & @192.168.7.201
-------------------
注:192.168.7.201 为日志服务器端IP地址
重启服务:
# service rsyslog restart
三.安装loganalyzer
# tar zxvf loganalyzer-3.6.3.tar.gz
# cd loganalyzer-3.6.3
# mkdir -p /usr/local/apache2/htdocs/loganalyzer
复制loganalyzer源代码到apache的DocumentRoot下loganalyzer目录
# cp -r src/* & /usr/local/apache2/htdocs/loganalyzer
# cp -r contrib/* &/usr/local/apache2/htdocs/loganalyzer
# chown -R daemon.daemon /usr/local/apache2/htdocs/loganalyzer
通过web向导安装loganalyzer前,必须先执行以下两个脚本
# cd /usr/local/apache2/htdocs/loganalyzer/
# sh configure.sh
# sh secure.sh
注:该脚本实际上是创建该目录下的config.php,并配置该文件权限。
在浏览器输入网址,进入安装向导
1.提示没有配置文件,点击here利用向导生成
3.按照如图输入配置,点击NEXT:
注:点击NEXT时若报错,后台执行如下命令后继续
# ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
4.开始写入数据库,NEXT
5.提示写入成功,NEXT
6.设置管理员账户,配置完毕NEXT
7.设置监控日志保存到mysql数据库中,按照如图配置后NEXT
8.完成配置,FINISH
9.进入登陆界面:
10.进入主界面:
查看loganalyzer是否获取192.168.7.201和192.168.7.74系统日志
利用navicat查看rsyslog服务端和客户端系统日志是否都写入数据库Syslog-SystemEvents表
---------- 大功告成------------
1.本人在loganalyzer安装向导配置的web后台账户,在登陆界面无法登陆,提示账号或密码错误,不知道是什么原因?最后是在向导一处去掉登陆认证才勉强通过,有遇到相同问题的朋友望帮忙解答。
经过一位朋友指点,终于找到了原因
首先利用以下命令守株待兔
# tail -f /usr/local/mysql/log/mysql.log
然后在loganalyzer向导STEP6输入web后台账号密码后,点击NEXT
查看到mysql.log日志里出现了一条INSERT语句
然后将该语句复制到后台手动执行,看报什么错误
# mysql -uroot -p123456;
& INSERT INTO logcon_users (username, password, is_admin) VALUES ('admin', '00a1f187721cxxxxxxx6bf791e69382c', 1);
ERROR 1364 (HY000): Field 'last_login' doesn't have a default value
提示'last_login'栏不能为空值
OK,直接登录navicat,将这栏设置为允许空值保存即可
从新执行这条语句
& INSERT INTO logcon_users (username, password, is_admin) VALUES ('admin', '00a1f187721cxxxxxxx6bf791e69382c', 1);
Query OK, 1 row affected (0.06 sec)
显示执行成功
利用navicat 查看后台该表,显示成功插入一条记录
重新利用该账号即可成功登录loganalyzer web后台
看来是mysql在执行该语句时,发现last_login栏默认为非空,所以拒绝这条insert语句执行,解决办法就是将该栏设置为允许空值即可
博主在线上老版本mysql-5.0.56无需进行上述手动操作,即可成功登录后台
但本篇出现的问题则是在mysql-5.6.10版本上
看来这应该不算是loganalyzer的BUG,应该是mysql在高版本执行insert语句提高了严谨性
这里给卡在这里的朋友点思路,仅供参考。
在此感谢longeleven11朋友的提点。。。。
2.安装rsyslog可谓是过程曲折,之前本想全部编译安装,最后才发现网上的文档各种误导,编译rsyslog最后花了2个小时安装了其6个依赖包,全部找的老外的文档挨个测试,装完网上给出的文档又不能合理给出如何与系统自带的rsyslog共存保证不冲突,也就是编译的rsyslog的启动方法如何与系统自带的区别,索性就yum吧,实属无奈之举,还有吐槽下google各种间歇性抽风,至于原因,大家都懂的。。。
3.Windows客户端安装(win2008 server 64bit)
1.下载evtsys
2.解压文件将包内64-Bit文件夹下的所有文件复制C:\Windows\System32下
3.开启evtsys服务
& cd c:\Windows\System32
& evtsys -i -s 10 -h 192.168.7.11 -p 514
& net start evtsys
4.验证效果
正文部分到此结束
08-26 (阅读 (1,855) )
02-06 (阅读 (5,964) )
网&&&名: 一路向北
英文名: Leon li
性&&&别: 男
职&&&业: DevOps
爱&&&好: 足球,健身,英语
简&&&介: 苦逼的80后摩羯座攻城狮一枚,目前转职运维研发双属性,关注SCM运维自动化,LINUX系统架构研究,网站部署,负载均衡等.
如果您觉得我写的东西对您有启发, 可以通过以下几种方式捐款帮助支撑我的博客租用服务器, 至于多少就看您心情啦 O(∩_∩)O~
支付宝转账地址:
支付宝转账账号: showerlee@
支付宝二维码:
微信钱包二维码:
------------------------------------------
如果您需要技术方面的帮助,您也可以访问我的淘宝小店,里面有很多优惠的服务套餐等待您选购 O(∩_∩)O~
淘宝小店地址:
------------------------------------------
如果您有给本博投放广告的意向,也可以留言板或者邮箱联系我
邮箱地址: showerlee@
WP Cumulus Flash tag cloud by
9 or better.
最新文章热门文章手气不错
文章总数:131 篇
评论总数:164 篇
标签数量:69 个
链接总数:5 个
建站日期:
运行天数:1259 天
最后更新:
Powered by WordPress公司前台和文员都负责什么工作?还有面试要注意的一些事项和要求,越详细越好~~_百度知道
公司前台和文员都负责什么工作?还有面试要注意的一些事项和要求,越详细越好~~
人事和财务管理的负责事项也写点希望写的详细点就要去面试了谢谢大家的支持
提问者采纳
1,在参加面试时除了注意自身的形象、不宜擦拭过多的香水、暴露太多的服饰出席正式场合:服装。项链手镯戴时需要配合套装,鞋跟3-5公分比较合适,显得人有亲和力。深色套装是最合适的、轻松明快的淡妆、选择衣服上、面试适宜清爽自然,确立良好的第一印象关系到你能否得到这份工作。2,面试时要多带一双,服装对一个人的外在形象影响很大:1,如果是长头发最好束起来,与服饰搭配的公文包显得非常雅致。指甲一定要保持整洁、夏季丝袜注意避免剐破。小巧的耳环可接受。4、订婚戒指总是合适的。文员面试前。化妆,一些面试礼仪同样影响求职结果:1,套装和连衣裙是比较正式。饰品、服装整体颜色以淡雅或同色系的搭配为宜。5。2。面试时的穿着。2。3。3,会让人觉得不礼貌、面谈时应穿着高跟鞋,就是成功面试的第一环节,要做好充分的准备。   应聘文员面试着装礼仪参与社会交往活动一定要注意个人形象问题、结婚戒指,最好不要烫发、发型要中规中矩、面试时。女士应聘文员面试着装,如果散开一定要干净应聘文员,避免意外尴尬事情发生!切忌浓妆艳抹
其他类似问题
为您推荐:
其他2条回答
这个是必须的。另外还要懂办公软件,长的漂亮就行。老板要是男的做个文员要那么复杂干啥。要会整理资料。好多东西都是去了公司才学的,财务报表之类的
  1.前台文员负责前台服务热线的接听和电话转接,做好来电咨询工作,重要事项认真记录并传达给相关人员,不遗漏、延误;   2.负责来访客户的接待、基本咨询和引见,严格执行公司的接待服务规范,保持良好的礼节礼貌;   3.对客户的投诉电话,及时填写登记表,并于第一时间传达到客户服务团队,定期将客户投诉记录汇总给副总经理;   4.负责公司前台或咨询接待室的卫生清洁及桌椅摆放,并保持整洁干净;   5.接受行政经理工作安排并协助人事文员作好行政部其他工作;   认真执行目标卡的管理规定,完成本部门分配的工作和任务。
编辑本段前台文员服务规范
  造访:   客户或来访者进门,前台马上起身接待,并致以问候或欢迎辞。如站着则先于客人问话而致以问候或欢迎辞。   单个人...
文员的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁DBA日记第三部 像Oracle一样思考 4月9日理解REDO LOG(5) BULK 操作能减少REDO吗?
DBA日记第三部 像Oracle一样思考 4月9日理解REDO LOG(5) BULK 操作能减少REDO吗?
DBA日记第三部 像Oracle一样思考 4月9日理解REDO LOG(5) BULK 操作能减少REDO吗?&&
4月9日理解REDO LOG(5) BULK 操作能减少REDO吗?
记得10多年前,老白为电信开发计费账务系统,那个时候,电信的计费系统应该算是“海量”数据处理系统了,一个本地网可能拥有50万电话用户,其中20-30万用户是有长话业务权限的,这些用户每个月可能会产生500万以上的长话话单。每个月底如何处理这些话单就是一个很大的挑战了。1999年电总发布了电信账务系统业务规范,并且要求各个开发商将其开发的账务系统统一到电总去测试,测试通过的才能够发给入网许可。在参加测试的60多家企业中,老白设计的系统虽然用户界面上做的比较丑陋(当时老白的公司一共不也就七八条枪,整个开发团队只有7个人,因此UI方面比起动辄几十人开发团队的公司来说,是没法比的),不过在整个账务处理的性能上是首屈一指的。处理50万长话用户,500万话单记录的账务处理中,总耗时4小时多一点,拿到了第一名,而第二名的成绩是6个半小时,第三名的成绩就已经是10小时开外了。当时老白能���胜出的法宝有两个,一个是将50万用户资料一次性载入内存,在内存中通过B树结构保存,第二个就是使用了BULK操作。后来老白也和第二名的公司进行了沟通,他们和我们相似的地方是也做了50万用户资料的预装载,但是他们没有使用BULK操作。
BULK INSERT操作比普通INSERT的速度要快很多,这一点是很多使用过BULK操作的人都了解的,不过为什么BULK操作会比较快呢?Oracle官方的说法是BULK操作的时候,USER进程和SQL引擎的交互次数会大大减少,因此BULK操作有较好的性能。老白也一直接受了这个观点,不过有一点疑惑的是,BULK操作和普通操作的差异仅仅在于和SQL引擎的交互次数上吗?难道BULK操作是一次性向SQL引擎提交一个SQL,SQL引擎内部处理BULK操作的时候还是将整个数组还原为一条一条的记录去插入的吗?还是说BULK INSERT在Oracle内部处理过程中有一些独特的地方呢?
在研究REDO OPCODE的时候,老白发现了一些蛛丝马迹,LAYER 11是ROW ACCESS方面的,也就是处理行数据的。在LAYER 11中,有这样一些操作:
&&Layer 11 : Row Access -&&KCOCODRW& &&&[kdocts.h]
& && && &Opcode 1 : Interpret Undo Record (Undo)
& && && &Opcode 2 : Insert Row Piece
& && && &Opcode 3 : Drop Row Piece
& && && &Opcode 4 : Lock Row Piece
& && && &Opcode 5 : Update Row Piece
& && && &Opcode 6 : Overwrite Row Piece
& && && &Opcode 7 : Manipulate First Column (add or delete the 1rst column)
& && && &Opcode 8 : Change Forwarding address
& && && &Opcode 9 : Change the Cluster Key Index
& && && &Opcode 10 :Set Key Links (change the forward & backward key links
& && && && && && &&&on a cluster key)
& && && &Opcode 11 :Quick Multi-Insert
& && && &Opcode 12 :Quick Multi-Delete
& && && &Opcode 13 :Toggle Block Header flags
我们注意到,11..11的定义为Quick Multi-insert,11.12是Quick Multi-Delete,这两个OPCODE是不是有可能和BULK操作有关呢?我们来做一个实验,首先创建一张测试表:
drop table sm_histable0101;
CREATE TABLE SM_HISTABLE0101
&&SM_ID& && && && &&&NUMBER(10)& && && && && &&&NOT NULL,
&&SM_SUBID& && && &&&NUMBER(3)& && && && && && &NOT NULL,
&&SERVICE_TYPE& && & VARCHAR2(6),
&&ORGTON& && && && & NUMBER(3),
&&ORGNPI& && && && & NUMBER(3),
&&ORGADDR& && && && &VARCHAR2(21)& && && && && &NOT NULL,
&&DESTTON& && && && &NUMBER(3),
&&DESTNPI& && && && &NUMBER(3),
&&DESTADDR& && && &&&VARCHAR2(21)& && && && && &NOT NULL,
&&PRI& && && && && & NUMBER(3),
&&PID& && && && && & NUMBER(3),
&&SRR& && && && && & NUMBER(3),
&&DCS& && && && && & NUMBER(3),
&&SCHEDULE& && && &&&VARCHAR2(21),
&&EXPIRE& && && && & VARCHAR2(21),
&&FINAL& && && && &&&VARCHAR2(21),
&&SM_STATUS& && && & NUMBER(3),
&&ERROR_CODE& && && &NUMBER(3),
&&UDL& && && && && & NUMBER(3),
&&SM_TYPE& && && && &NUMBER(10),
&&SCADDRTYPE& && && &NUMBER(3),
&&SCADDR& && && && & VARCHAR2(21),
&&MOMSCADDRTYPE& && &NUMBER(3),
&&MOMSCADDR& && && & VARCHAR2(21),
&&MTMSCADDRTYPE& && &NUMBER(3),
&&MTMSCADDR& && && & VARCHAR2(21),
&&SCHEDULEMODE& && & NUMBER(3),
&&UD& && && && && &&&VARCHAR2(255),
&&ID_HINT& && && && &NUMBER(10)& && && && && &&&NOT NULL,
&&DELIVERCOUNT& && & NUMBER(10),
&&L2CACHE& && && && &NUMBER(10),
&&L2CACHEWRITECOUNT&&NUMBER(10),
&&SERVICE& && && && &NUMBER(10),
&&NEWORGADDRESS& && &VARCHAR2(21),
&&NEWDESTADDRESS& &&&VARCHAR2(21)
然后创建两个存储过程redo1和redo2,分别用于普通的插入操作和bulk插入操作:
create or replace procedure redo1 is
&&TYPE T_SM_ID& & IS TABLE OF& && && & NUMBER(10)& &INDEX BY BINARY_INTEGER;
&&TYPE T_SM_SUBID IS TABLE OF& && && & NUMBER(3)& & INDEX BY BINARY_INTEGER;
&&TYPE T_ORGADDR& & IS TABLE OF& && &&&VARCHAR2(21) INDEX BY BINARY_INTEGER;
&&TYPE T_DESTADDR& &IS TABLE OF& && &&&VARCHAR2(21) INDEX BY BINARY_INTEGER;
&&TYPE T_ID_HINT& & IS TABLE OF& && &&&NUMBER(10)& &INDEX BY BINARY_INTEGER;
&&V_SM_ID& && && &T_SM_ID;
&&V_SM_SUBID& && &T_SM_SUBID;
&&V_ORGADDR& && & T_ORGADDR;
&&V_DESTADDR& && &T_DESTADDR;
&&V_ID_HINT& && & T_ID_HINT;
&&I INTEGER;
&&VREDO1 INTEGER;
& &FOR I IN 1.. 2000
& && &V_SM_ID(I):=I;
& && &V_SM_SUBID(I):=12;
& && &V_ORGADDR(I):='';
& && &V_DESTADDR(I):='555555';
& && &V_ID_HINT(I):=i;
& &END LOOP;&&
& &select value&&into vredo1 from v$sysstat where name = 'redo size';
& &FOR I IN 1..2000 LOOP
& &&&INSERT INTO SM_HISTABLE0101 (SM_ID,SM_SUBID,ORGADDR,DESTADDR,ID_HINT) VALUES
& && & (V_SM_ID(I),V_SM_SUBID(I),V_ORGADDR(I),V_DESTADDR(I),V_ID_HINT(I));
& &END LOOP;
& &COMMIT;
& &select value&&into vredo2 from v$sysstat where name = 'redo size';
& &select value&&into vredo2 from v$sysstat where name = 'redo size';
& &dbms_output.put_line('redo size:'||to_char(vredo2-vredo1));
create or replace procedure redo2 is
&&TYPE T_SM_ID& & IS TABLE OF& && && & NUMBER(10)& &INDEX BY BINARY_INTEGER;
&&TYPE T_SM_SUBID IS TABLE OF& && && & NUMBER(3)& & INDEX BY BINARY_INTEGER;
&&TYPE T_ORGADDR& & IS TABLE OF& && &&&VARCHAR2(21) INDEX BY BINARY_INTEGER;
&&TYPE T_DESTADDR& &IS TABLE OF& && &&&VARCHAR2(21) INDEX BY BINARY_INTEGER;
&&TYPE T_ID_HINT& & IS TABLE OF& && &&&NUMBER(10)& &INDEX BY BINARY_INTEGER;
&&V_SM_ID& && && &T_SM_ID;
&&V_SM_SUBID& && &T_SM_SUBID;
&&V_ORGADDR& && & T_ORGADDR;
&&V_DESTADDR& && &T_DESTADDR;
&&V_ID_HINT& && & T_ID_HINT;
&&I INTEGER;
&&VREDO1 INTEGER;
& &n:=2000;
& &FOR I IN 1.. N
& && &V_SM_ID(I):=I;
& && &V_SM_SUBID(I):=12;
& && &V_ORGADDR(I):='';
& && &V_DESTADDR(I):='555555';
& &&&V_ID_HINT(I):=i;
& &END LOOP;&&
& &select value&&into vredo1 from v$sysstat where name = 'redo size';
& &FORALL I IN 1..N
& &&&INSERT INTO SM_HISTABLE0101 (SM_ID,SM_SUBID,ORGADDR,DESTADDR,ID_HINT) VALUES
& && & (V_SM_ID(I),V_SM_SUBID(I),V_ORGADDR(I),V_DESTADDR(I),V_ID_HINT(I));
& &COMMIT;
& &select value&&into vredo2 from v$sysstat where name = 'redo size';
& &select value&&into vredo2 from v$sysstat where name = 'redo size';
& &dbms_output.put_line('redo size:'||to_char(vredo2-vredo1));
然后执行下面的代码进行测试:
set serveroutput on
truncate table sm_histable0101;
select max(ktuxescnw * power(2, 32) + ktuxescnb)&&from x$
exec redo1;
select max(ktuxescnw * power(2, 32) + ktuxescnb)&&from x$
truncate table sm_histable0101;
select max(ktuxescnw * power(2, 32) + ktuxescnb)&&from x$
exec redo2;
select max(ktuxescnw * power(2, 32) + ktuxescnb)&&from x$
测试结果如下:
Table truncated.
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
& && && && && && && && && &
SQL& redo size:707356
PL/SQL procedure successfully completed.
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
& && && && && && && && && &
SQL& truncate table sm_histable0101;
select max(ktuxescnw * power(2, 32) + ktuxescnb)&&from x$
exec redo2;
select max(ktuxescnw * power(2, 32) + ktuxescnb)&&from x$
Table truncated.
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
& && && && && && && && && &
SQL& redo size:138728
PL/SQL procedure successfully completed.
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
& && && && && && && && && &
从测试的结果来看,使用普通的INSERT操作,产生了707356 字节的REDO LOG,而使用BULK INSERT,只产生了138728字节的REDO LOG,REDO LOG产生量只有正常水平的1/5不到。看样子BULK INSERT操作在ORACLE RDBMS内部的操作是完全不同的,应该是采用了我们前面猜测的QUICK MULTI-INSERT操作。通过DUMP REDO LOG我们来验证一下:
SQL&&&alter system dump logfile '/opt/oracle/oradata/orcl/redo01.log' scn min
System altered.
我们来查看DUMP出来的REDO信息:
CHANGE #2 TYP:0 CLS:18 AFN:7 DBA:0x01c007f2 OBJ: SCN:0xbf0 SEQ:&&2 OP:5.1
ktudb redo: siz: 396 spc: 5858 flg: 0x0012 seq: 0x2aba rec: 0x11
& && && && &xid:&&0x0551d
ktubl redo: slt: 33 rci: 0 opc: 11.1 objn: 122951 objd: 122956 tsn: 0
Undo type:&&Regular undo& && &&&Begin trans& & Last buffer split:&&No
Temp Object:&&No
Tablespace Undo:&&No
& && && && & 0x&&prev ctl uba: 0x01c007f2.2aba.0f
prev ctl max cmt scn:&&0xa1f&&prev tx cmt scn:&&0xa26
txn start scn:&&0xffff.ffffffff&&logon user: 0&&prev brb: &&prev bcl: 0 KDO undo record:
op: 0x03&&ver: 0x01
KDO Op code: QMD row dependencies Disabled
&&xtype: XA flags: 0x&&bdba: 0x&&hdba: 0x
itli: 1&&ispac: 0&&maxfr: 4863
tabn: 0 lock: 0 nrow: 131
slot[0]: 0
slot[1]: 1
slot[2]: 2
slot[3]: 3
slot[4]: 4
slot[5]: 5
slot[6]: 6
slot[7]: 7
slot[8]: 8
slot[9]: 9
slot[10]: 10
slot[11]: 11
slot[12]: 12
slot[13]: 13
slot[14]: 14
slot[15]: 15
slot[16]: 16
slot[17]: 17
slot[18]: 18
slot[19]: 19
slot[20]: 20
slot[21]: 21
slot[22]: 22
slot[23]: 23
slot[24]: 24
从上面来看,UNDO的数据也和普通的INSERT操作不同,是一种批量方式的UNDO,对于同一个数据块中的所有记录,都产生在同一个UNDO的CHANGE VECTOR中。我们再来看看数据:
CHANGE #3 TYP:0 CLS: 1 AFN:1 DBA:0x OBJ:122956 SCN:0xc94 SEQ:&&3 OP:11.11
op: 0x01&&ver: 0x01
op: F&&xid:&&0x0551d& & uba: 0x01c007f2.2aba.11
KDO Op code: QMI row dependencies Disabled
&&xtype: XA flags: 0x&&bdba: 0x&&hdba: 0x
itli: 1&&ispac: 0&&maxfr: 4863
tabn: 0 lock: 1 nrow: 131
slot[0]: 0
tl: 53 fb: --H-FL-- lb: 0x0&&cc: 29
col&&0: [ 2]&&c1 02
col&&1: [ 2]&&c1 0d
col&&2: *NULL*
col&&3: *NULL*
col&&4: *NULL*
col&&5: [ 9]&&34 34 34 35 35 35 35 36 35
col&&6: *NULL*
col&&7: *NULL*
col&&8: [ 6]&&35 35 35 35 35 35
col&&9: *NULL*
col 10: *NULL*
col 11: *NULL*
col 12: *NULL*
col 13: *NULL*
col 14: *NULL*
col 15: *NULL*
col 16: *NULL*
col 17: *NULL*
col 18: *NULL*
col 19: *NULL*
col 20: *NULL*
col 21: *NULL*
col 22: *NULL*
col 23: *NULL*
col 24: *NULL*
col 25: *NULL*
col 26: *NULL*
col 27: *NULL*
col 28: [ 2]&&c1 02
slot[1]: 1
tl: 53 fb: --H-FL-- lb: 0x0&&cc: 29
确实使用了OP CODE:11.11,BULK INSERT 操作使用了批量数据插入机制,因此BULK INSERT的性能才能够远高于单条记录操作。在我们以往进行的测试中,BULK操作一般都比单条操作快1倍以上,有的甚至能够快2倍以上。
在REDO LAYER 11中,大家也许会发现一个问题,11.11是MULTI-INSERT,11.12是MULTI-DELETE,单独少了MULTI-UPDATE,难道BULK UPDATE操作的实现机制和BULK INSERT有所不同吗?我们通过一个实验来看看BULK UPDATE是否能够减少REDO的产生量。通过简单的修改REDO1,REDO2两个存储过程,生成REDOU1,REDOU2这两个存储过程:
create or replace procedure redou1 is
&&TYPE T_SM_ID& & IS TABLE OF& && && & NUMBER(10)& &INDEX BY BINARY_INTEGER;
&&TYPE T_SM_SUBID IS TABLE OF& && && & NUMBER(3)& & INDEX BY BINARY_INTEGER;
&&TYPE T_ORGADDR& & IS TABLE OF& && &&&VARCHAR2(21) INDEX BY BINARY_INTEGER;
&&TYPE T_DESTADDR& &IS TABLE OF& && &&&VARCHAR2(21) INDEX BY BINARY_INTEGER;
&&TYPE T_ID_HINT& & IS TABLE OF& && &&&NUMBER(10)& &INDEX BY BINARY_INTEGER;
&&V_SM_ID& && && &T_SM_ID;
&&V_SM_SUBID& && &T_SM_SUBID;
&&V_ORGADDR& && & T_ORGADDR;
&&V_DESTADDR& && &T_DESTADDR;
&&V_ID_HINT& && & T_ID_HINT;
&&I INTEGER;
&&VREDO1 INTEGER;
& &FOR I IN 1.. 2000
& && &V_SM_ID(I):=I;
& && &V_SM_SUBID(I):=12;
& && &V_ORGADDR(I):='111111';
& && &V_DESTADDR(I):='2222';
& && &V_ID_HINT(I):=i;
& &END LOOP;&&
& &select value&&into vredo1 from v$sysstat where name = 'redo size';
& &FOR I IN 1..2000 LOOP
& &&&update SM_HISTABLE0101 SET ORGADDR=V_ORGADDR(I) WHERE ID_HINT=V_ID_HINT(I);
& &END LOOP;
& &COMMIT;
& &select value&&into vredo2 from v$sysstat where name = 'redo size';
& &select value&&into vredo2 from v$sysstat where name = 'redo size';
& &dbms_output.put_line('redo size:'||to_char(vredo2-vredo1));
create or replace procedure redoU2 is
&&TYPE T_SM_ID& & IS TABLE OF& && && & NUMBER(10)& &INDEX BY BINARY_INTEGER;
&&TYPE T_SM_SUBID IS TABLE OF& && && & NUMBER(3)& & INDEX BY BINARY_INTEGER;
&&TYPE T_ORGADDR& & IS TABLE OF& && &&&VARCHAR2(21) INDEX BY BINARY_INTEGER;
&&TYPE T_DESTADDR& &IS TABLE OF& && &&&VARCHAR2(21) INDEX BY BINARY_INTEGER;
&&TYPE T_ID_HINT& & IS TABLE OF& && &&&NUMBER(10)& &INDEX BY BINARY_INTEGER;
&&V_SM_ID& && && &T_SM_ID;
&&V_SM_SUBID& && &T_SM_SUBID;
&&V_ORGADDR& && & T_ORGADDR;
&&V_DESTADDR& && &T_DESTADDR;
&&V_ID_HINT& && & T_ID_HINT;
&&I INTEGER;
&&VREDO1 INTEGER;
& &n:=2000;
& &FOR I IN 1.. N
& && &V_SM_ID(I):=I;
& && &V_SM_SUBID(I):=12;
& && &V_ORGADDR(I):='111111';
& && &V_DESTADDR(I):='2222';
& &&&V_ID_HINT(I):=i;
& &END LOOP;&&
& &select value&&into vredo1 from v$sysstat where name = 'redo size';
& &FORALL I IN 1..N
& &&&update SM_HISTABLE0101 SET ORGADDR=V_ORGADDR(I) WHERE ID_HINT=V_ID_HINT(I);
& &COMMIT;
& &select value&&into vredo2 from v$sysstat where name = 'redo size';
& &select value&&into vredo2 from v$sysstat where name = 'redo size';
& &dbms_output.put_line('redo size:'||to_char(vredo2-vredo1));
然后执行下面的过程:
select max(ktuxescnw * power(2, 32) + ktuxescnb)&&from x$
exec redou1;
select max(ktuxescnw * power(2, 32) + ktuxescnb)&&from x$
select max(ktuxescnw * power(2, 32) + ktuxescnb)&&from x$
exec redou2;
select max(ktuxescnw * power(2, 32) + ktuxescnb)&&from x$
redo size:578904
PL/SQL procedure successfully completed.
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
& && && && && && && && && &
SQL& SQL& SQL&
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
& && && && && && && && && &
SQL& redo size:571168
PL/SQL procedure successfully completed.
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
& && && && && && && && && &
从上面的结果看,两种操作产生的REDO量是基本上十分接近的,看样子BULK UPDATE在REDO方面并没有很大的改善。通过DUMP REDO LOG,我们进一步验证一下这个测试结果:
CHANGE #3 TYP:2 CLS: 1 AFN:1 DBA:0x OBJ:122959 SCN:0xcbfd SEQ:&&1 OP:11.5
op: 0x11&&ver: 0x01
op: F&&xid:&&0x0724a& & uba: 0x0bc.1e
Block cleanout record, scn:&&0xcbff ver: 0x01 opt: 0x02, entries follow...
&&itli: 2&&flg: 2&&scn: 0xcbfd
KDO Op code: URP row dependencies Disabled
&&xtype: XA flags: 0x&&bdba: 0x&&hdba: 0x
itli: 1&&ispac: 0&&maxfr: 4863
tabn: 0 slot: 0(0x0) flag: 0x2c lock: 1 ckix: 191
ncol: 29 nnew: 1 size: 0
col&&5: [ 6]&&31 31 31 31 31 31
我们看到了OP CODE 11.5,这是一个正常的单行UPDATE操作。
昵称: 〇〇 &时间:
昵称: 〇〇 &时间:
昵称: 〇〇 &时间:
昵称: 〇〇 &时间:
昵称: 〇〇 &时间:
昵称: 〇〇 &时间:

我要回帖

更多关于 pm2 log 位置 的文章

 

随机推荐