In 2012, Alcatel-Lucent joined an elite circle of technology stars on MIT Technology Review’s TR50 list which recognizes commercial innovations most likely to ‘change lives around the world.’ Join MIT’s TR’s editor Stephen Cass and CTO Marcus Weldon of Alcatel-Lucent for a robust discussion on what sparks corporate innovation today and how global companies like Alcatel-Lucent keep stoking the fires of innovations and continually surprising the market with new technologies like lightRadio.
ADDM AWR Notes.
ASH (Active Session History)
ASH以V$SESSION为基础,每秒采样一次,记录活动会话等待的事件。不活动的会话不会采样,采样工作由新引入的后台进程MMNL来完成。
ASH buffers 的最小值为1MB,最大值不超过30MB。内存中记录数据。期望值是记录一小时的内容。
生成ASH报告:
SQLPLUS>@?/rdbms/ashrpt.sql
ASH 内存记录数据始终是有限的,为了保存历史数据,引入了自动负载信息库(Automatic Workload Repository ,AWR) 由后台进程MMON完成。ASH信息同样被采集写出到AWR负载库中。由于内存不是足够的,所以MMNL进程在ASH写满后会将信息写出到AWR负载库 中。ASH全部写出是不可接受的,所以一般只写入收集的10%的数据量,而且使用direct-path insert完成,尽量减少日志的生成,从而最小化数据库 性能影响。
写出到AWR负载库的ASH信息记录在AWR的基础表wrh$active_session_hist中,wrh$active_session_hist是一个分区表,Oracle会自动进行数据清理。
AWR(Automatic Workload Repository)自动工作负载信息库
AWR是Oracle 10g 中的一个新特性,类似于10g以前的statspack。不过在使用上要比statspack简单,提供的性能指标要比statspack多很多,能更好的帮助DBA来发现数据库的性能瓶颈。
AWR 是Oracle安装好后自动启动的,不需要特别的设置。收集的统计信息存储在SYSAUX表空间SYS模式下,以WRM$_*和WRH$_*的格式命名, 默认会保留最近7天收集的统计信息。每个小时将收集到的信息写到数据库中,这一系列操作是由一个叫MMON的进程来完成的。
AWR存储的数据分类:
WRM$表存储AWR的元数据(awrinfo.sql脚本)
WRH$表存储采样快照的历史数据(awrrpt.sql脚本)
WRI$表存储同数据库建议功能相关的数据(ADDM相关数据)
一.生成AWR报告:
SQL>@?/rdbms/admin/awrrpt
根据向导来完成AWR报告的生成。需要注意的是,在选择时间范围的时候,中间不能有停机(如果显示的时间中间有空白行,表示有停机情况)。在选择报告类型的时候一般使用默认的HTML,方便查看。
二.查看数据库的AWR的设置:
SQL> select snap_interval, retention from dba_hist_wr_control;
SNAP_INTERVAL
—————————————————————————
RETENTION
—————————————————————————
+00000 01:00:00.0(每小时收集一次)
+00007 00:00:00.0(保留7天)
三.修改默认设置:
begin
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(interval => 20,
retention => 2*24*60);
end;
修改成每20分钟收集一次统计量,保留最近的2天统计量信息。
四.手动收集一次数据库的统计信息:
exec DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;
我们还可以通过DBMS_WORKLOAD_REPOSITORY包完成对基线,默认设置的修改等操作。
ADDM (Automatic Database Diagnostic Monitor AWR)
是Oracle内部的一个顾问系统,能够自动的完成最数据库的一些优化的建议,给出SQL 的优化,索引的创建,统计量的收集等建议。
ADDM报告生成:
SQLPLUS>@?/rdbms/addmrpt.sql
Oracle 性能调整最重要的就是对最影响性能的SQL的调整。在一个应用中,能够影响到数据库的只有SQL,也只能是SQL。我们不能一味依靠增强硬件,修改系统、 数据库参数来提高数据库的性能。更多的应该关注那些最影响性能的SQL语句。ASH报告、AWR报告、ADDM报告都能够找出最影响性能的SQL的工具。 在分析ASH报告、AWR报告的时候,最重要的就是关注SQL Statistics,SQL Statistics中最应该关注的是SQL ordered by Gets和SQL ordered by Reads两个指标。大量的Gets(逻辑读)会占用大量的CPU时间。大量的Reads(物理读)会引起IO的瓶颈出现。一般情况下,大量的Gets会 伴随着大量的Reads出现。当然,我们可以通过增大SGA的大小来减少Reads的量。通过这两个指标找到了最影响性能的SQL,这是首要的,也是必要 的。下一步就可以通过创建索引,调整SQL来提高SQL单独执行时的性能。减少SQL执行时出现的高Gets,Reads。当然整体的性能影响还和 excutions有关,如果这条SQL执行的次数过多,累加起来量还是很大的。那么就可以考虑通过在应用上缓存等手段来减少SQL执行的次数。另外还有 一个需要注意的问题就是在开发过程中SQL一定要使用绑定变量,来减少硬解析(大量的硬解析也会消耗大量的CPU时间,占用大量的Latch)。在开发过 程中有个原则就是:小事务。操作完成及时的提交。
我们使用这么多种方式、报告只有一个唯一的目的:找出最影响系统性能的SQL语句。找到SQL下一步就是对它进行调整了。
我 们在监控数据库时,如果是当前正在发生的问题,我们可以通过v$session+v$sqlarea来找出性能最差的SQL语句。如果在一个小时以内发生 的我们可以通过生成ASH报告来找出SQL。如果是1小时以上或几天我们可以通过AWR报告来找出几小时,几天以来最影响系统的SQL语句。ADDM报告 基于AWR库,默认可以保存30天的ADDM报告。
我们也可以直接查询试图:
v$session (当前正在发生)
v$session_wait (当前正在发生)
v$session_wait_history (会话最近的10次等待事件)
v$active_session_history (内存中的ASH采集信息,理论为1小时)
wrh$_active_session_history (写入AWR库中的ASH信息,理论为1小时以上)
dba_hist_active_sess_history (根据wrh$_active_session_history生成的视图)
zz 各种声卡驱动安装介绍
zz from: http://hi.baidu.com/lqs%5Flfzz/blog/item/ff2aba953905ab14d21b708c.html
|
audio device on high definition audio bus = High Definition Audio 总线上的音频设备网上让大家安装KB835221或KB888111的老调就不重弹了,XP SP2需要微软UAA补丁,SP3就没必要再打了。其他安装此声卡驱动的文章统统是伪技巧,或者纯粹瞎猫碰到死老鼠,蒙对了。
这里才是解决之道。
最早在惠普V3000系列笔记本上认识了这个东西,XP SP2系统安装KB888111以后就认出了两个设备:High Definition Audio 总线上的音频设备 和 High Definition Audio 总线上的调制解调器设备。很清楚,是Conexant(科胜讯)的声卡和猫。从V3000开始惠普很多笔记本都用Conexant声卡,芯片从CX20468到现在常见的CX20561。 一个不用软件识别声卡品牌的方法是根据硬件ID来判断:
截图中就是惠普CQ60使用的CX20561,HDAUDIO\FUNC_01&VEN_14F1&DEV_5051,5051就代表芯片。设备管理器的另外一个High Definition Audio 总线上的音频设备是显卡HDMI显示时提供音频输出,一般是ATI HDMI Audio Device或者Nvidia HD Audio Device,这个根据需要可选择不装。 并不是所有的声卡都在设备管理器显示“High Definition Audio 总线上的音频设备”,例如,某些软件检测出Intel 945芯片组的声卡“Intel 82801GB ICH7 – High Definition Audio [A1]”可能就是Analog Devices(亚诺德)的声卡,比如http://zhidao.baidu.com/question/113685619.html; “Intel 82801IB ICH9 – High Definition Audio [A3]”可能是Conexant,比如http://zhidao.baidu.com/question/115628848.html;或者Sigmatel(后来被IDT收购,换标),比如http://zhidao.baidu.com/question/121455538.html,惠普CQ35、CQ40、CQ45都是如此。 这里不说最常见的Realtek,是因为Realtek市场占有率高,官方有公版驱动,别人给个驱动都可能蒙对了(不过有的似乎可以安装却无声音,比如C-media用realtek(前者2004年被后者收购)驱动)。 Conexant、Sigmatel、Analog Devices这三家是不发布公版驱动的,所以各家厂商的声卡驱动一般也就不通用。 惠普笔记本IDT声卡只能用官方提供驱动,其他网站下的驱动都是浮云。最新版驱动是http://h30318.www3.hp.com/pub/softpaq/sp55001-55500/sp55026.exe,版本号5.10.6365。支持Win7(包括64位)和XP(官方没写,但驱动包里有XP安装文件),惠普CQ35、CQ40、CQ41、CQ421、CQ45、G4、G6、Envy 14系列笔记本。 我比对过了sp55026是最新版,sp45073、sp46736、sp50856、sp51937都是旧版。 基于联想发布的Conexant声卡驱动做的修改版,可以支持以下笔记本声卡型号,你也可以自己添加。 ;HP CQ60 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_103C360A HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_103C360B ;V3907 dv2700 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_103C30CD HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_103C30D6 HDAUDIO\FUNC_01&VEN_14F1&DEV_5045&SUBSYS_103C30B5 HDAUDIO\FUNC_01&VEN_14F1&DEV_5045&SUBSYS_103C30CD HDAUDIO\FUNC_01&VEN_14F1&DEV_5045&SUBSYS_103C30B2 ;V3172 DV2012 HDAUDIO\FUNC_01&VEN_14F1&DEV_5047&SUBSYS_103C30B2 HDAUDIO\FUNC_01&VEN_14F1&DEV_5047&SUBSYS_103C30A5 HDAUDIO\FUNC_01&VEN_14F1&DEV_5047&SUBSYS_103C30A0 ;原版 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_17AA20FD HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_17AA20FF HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_17AA2100 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_17AA211B HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_17AA211C HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_17AA211D HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_17AA211F ;宏碁 4732 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_10250214 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_10250215 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1025030D HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_10250219 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1025021A HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_10250292 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1025021C HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1025021D HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_10250270 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_10250253 ;联想G450 G550 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_17AAC001 ;戴尔a840 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_10280298 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1028029A HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_102802A9 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_102802B8 ;戴尔Latitude 1220 1014 CX20583 HDAUDIO\FUNC_01&VEN_14F1&DEV_5067&SUBSYS_102802D8 HDAUDIO\FUNC_01&VEN_14F1&DEV_5069&SUBSYS_102802D8 HDAUDIO\FUNC_01&VEN_14F1&DEV_5067&SUBSYS_10280401 HDAUDIO\FUNC_01&VEN_14F1&DEV_5067&SUBSYS_10280402 HDAUDIO\FUNC_01&VEN_14F1&DEV_5067&SUBSYS_10280403 ;东芝M300 L310 M800 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1179FF51 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1179FF52 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1179FF53 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1179FF54 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1179FF55 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1179FF56 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1179FF57 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1179FF59 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1179FF5A HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1179FF5B HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1179FF5C HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1179FF5D HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1179FF5E HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1179FF5F ;Thinkpad sl300 HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_17AA2106 以下是收集的声卡设备ID ;CQ35 CQ40 CQ45 DV3 DV4 ;Dell 1318 1440 HDAUDIO\FUNC_01&VEN_111D&DEV_7605&SUBSYS_102802FA XPS13 ;hp541 ;ProBook 4411s |
江湖上有这么一说:欲练神功,必先谷歌
2月24日,《商业周刊》近日刊登名为《五招图解 Google 搜索秘籍》的文章,详细分析利用Google 搜索信息技巧。以下为全文:
江湖上有这么一说:欲练神功,必先谷歌
而你是否每次在Google时都只加入空格键分隔关键词呢?
最近伊利诺Wesleyan 大学的研究发现只有不到25%的学生拥有理想的搜索技能,而大部份的学生对于搜索过程上都有相当程度的困难与阻碍。相对于信息同样发达的台湾学生与研究生,可是相当大的警讯,如何有效率的搜索可是攸关报告和论文能否准时交差呀。
通过以下的图解搜索小技巧,希望让大家在寻找信息时更为顺利又迅速。
第一招─小试身手
想搜索纽约时报在2008到2010年关于大学测试分数但不是SAT入学分数的文章?
Step1:若只想搜索NYTIMES网站的数据,输入site:nytimes.com
Step2:关键词前面加上波浪符号,输入~college
Step3:将不可拆开的关键词用双引号括起来,输入”test scores”
Step4:不想纳入的关键词前面加上负号,输入-SATs
Step5:时间区间用两个句点间隔,输入2008..2010
想搜索燕子飞行速度的专业报告?
Step1:若只想搜索PDF档案,输入filetype:pdf
Step2:若只想搜索文章的「标题」,例如:速度(velocity),关键词请输入intitle:velocity
Step3:搜索各式各样的燕子(swallow),在燕子前加上*,输入*swallow
第二招─研究生必杀技
想搜索Dr. Ronald L. Green和Dr. Thomas P.Buttz关于光合作用(photosynthesis)的论文?
Step1:作者关键词,输入author:green
Step2:主题关键词,输入potosynthesis
Step3:想让搜索结果更明确,在关键词旁加入双引号,在此加入作者的全名简写,输入”tp buttz”
第三招─移行换单位
字词定义
想找某个词的定义,可以在关键词前输入define:
例如:define:angary
数学计算
直接输入数学表达式即可
例如:(2*3)/5+44-1
单位转换
在想转换的单位前加上in
例如:54 pounds in kilograms,中文也可:54磅in公斤
第四招─杀手键
在这里一般键盘上为Ctrl 键,Apple的使用者则是用Command键(空格键旁边的那颗):
在页面上做关键词搜索
只要同时按下Ctrl加上F,再输入关键词,关键词就会被重点标注
页面上放大缩小
同时按下Ctrl加上+或-,即可放大或缩小页面和PDF档的文件
选取页面网址
同时按下Ctrl加上L,就可以直接切换到网址列并选取网址
分页循环
Ctrl加上tab键,可以切换到浏览器下一个分页
第五招─万宗归一心法
善用你的图书馆数据库
Google也许是十分好用的工具,但也别忘了许多重要的文献还是需要从专业的论文数据库搜索才找的到喔!
别引用维基百科
维基百科给我们相当大的方便做资料搜集,是一个很适合入门的地方,但里面很多资料已经是缺乏来源引证的,但好的维基条目还是可以提供我们一些引用资料的线索。
找参考文献
在数字或传统的研究上,从书、论文或报告上的参考文献下手是不会错的,从文献追溯,有机会找到更具重要性的数据。
即使Google如此方便,大家还是要动动脑、重新消化一番呀。可不要复制贴上大法,到时老板也用五招秘籍找到一样的数据,被抓包可就得不偿失了。
(资料来源:mashable)
zz 消息称阿朗将在欧洲裁员1800人
消息称阿朗将在欧洲裁员1800人
该工会官员称,预计法国将有450人受影响,意大利受影响员工数量基本与法国一致,剩余部分则在欧洲其他国家进行。
对此,阿朗发言人称,公司正在考虑的人事调整“不是裁员”,而是“岗位重新分配”。至于具体的数量,该发言人并未透露。
面对低迷的经济形式和激烈的市场竞争,阿朗正努力提升利润。公司去年11月曾表示,计划在2012年节约开支5亿欧元(约合6.63亿美元)。
自5年前合并成新公司以来,阿朗就一直困难重重。再加上来自亚洲厂商的激励竞争,以及整个欧洲的经济问题,使得阿朗所面临的问题更加棘手。
阿朗发言人还称:“公司目前并未考虑全球性的重组计划,只是内部的职位调整,以进一步提高工作效率。”(李明)
Issue with ls * argument too long.
Here is the answer to the homework.
We met issue with ftp command ls * with one of our NPO, that “Argument too long” returned from server side.
Decided to figure out why we have such limitation.
First try to test directly on Linux server, that if we run ls * in that directory the same error information raised.
So it seems not the issue with ftp server but issue with OS it self, maybe due to shell or system call.
Dive into source code of coreutil for ls, seems the only limitation would be the argc length limitation. but argc is int, which is 4 Bytes (32 bits) that can indicate 4294967296 arguments. So it definitly not this limitation since on this server we do not have so many files, and of course, with 32bit OS, we can not have more that such number of files in one directory ( thanks to d_entry size, it’s 32 bits too.) So if we have to reach such limitation, the directory is not existed. But with a 32 bits OS connecting to 64 bits OS, the problem may occur.
Then change to check OS it self, very lucky that I found there is some descriptions in linux/binfmts.h that
1#ifndef _LINUX_BINFMTS_H
2#define _LINUX_BINFMTS_H
3
4#include <linux/capability.h>
5
6struct pt_regs;
7
8/*
9 * MAX_ARG_PAGES defines the number of pages allocated for arguments
10 * and envelope for the new program. 32 should suffice, this gives
11 * a maximum env+arg of 128kB w/4KB pages!
12 */
13#define MAX_ARG_PAGES 32
14
15/* sizeof(linux_binprm->buf) */
16#define BINPRM_BUF_SIZE 128
17
18#ifdef __KERNEL__
19
20/*
21 * This structure is used to hold the arguments that are used when loading binaries.
22 */
23struct linux_binprm{
24 char buf[BINPRM_BUF_SIZE];
25 struct page *page[MAX_ARG_PAGES];
26 struct mm_struct *mm;
27 unsigned long p; /* current top of mem */
28 int sh_bang;
29 struct file * file;
30 int e_uid, e_gid;
31 kernel_cap_t cap_inheritable, cap_permitted, cap_effective;
32 void *security;
33 int argc, envc;
34 char * filename; /* Name of binary as seen by procps */
35 char * interp; /* Name of the binary really executed. Most
36 of the time same as filename, but could be
37 different for binfmt_{misc,script} */
38 unsigned interp_flags;
39 unsigned interp_data;
40 unsigned long loader, exec;
41};
42
So it means for a command or other bin program, the total arguments line size should be page size * MAX_ARG_PAGES.
Then Check memory management functions about page definition in linux/mm.h.
27 /*
28 * Each physical page in the system has a struct page associated with
29 * it to keep track of whatever it is we are using the page for at the
30 * moment. Note that we have no way to track which tasks are using
31 * a page, though if it is a pagecache page, rmap structures can tell us
32 * who is mapping it.
33 *
34 * The objects in struct page are organized in double word blocks in
35 * order to allows us to use atomic double word operations on portions
36 * of struct page. That is currently only used by slub but the arrangement
37 * allows the use of atomic double word operations on the flags/mapping
38 * and lru list pointers also.
39 */
40 struct page {
41 /* First double word block */
42 unsigned long flags; /* Atomic flags, some possibly
43 * updated asynchronously */
44 struct address_space *mapping; /* If low bit clear, points to
45 * inode address_space, or NULL.
46 * If page mapped as anonymous
47 * memory, low bit is set, and
48 * it points to anon_vma object:
49 * see PAGE_MAPPING_ANON below.
50 */
51 /* Second double word */
52 struct {
53 union {
54 pgoff_t index; /* Our offset within mapping. */
55 void *freelist; /* slub first free object */
56 };
57
58 union {
59 /* Used for cmpxchg_double in slub */
60 unsigned long counters;
61
62 struct {
63
64 union {
65 /*
66 * Count of ptes mapped in
67 * mms, to show when page is
68 * mapped & limit reverse map
69 * searches.
70 *
71 * Used also for tail pages
72 * refcounting instead of
73 * _count. Tail pages cannot
74 * be mapped and keeping the
75 * tail page _count zero at
76 * all times guarantees
77 * get_page_unless_zero() will
78 * never succeed on tail
79 * pages.
80 */
81 atomic_t _mapcount;
82
83 struct {
84 unsigned inuse:16;
85 unsigned objects:15;
86 unsigned frozen:1;
87 };
88 };
89 atomic_t _count; /* Usage count, see below. */
90 };
91 };
92 };
93
94 /* Third double word block */
95 union {
96 struct list_head lru; /* Pageout list, eg. active_list
97 * protected by zone->lru_lock !
98 */
99 struct { /* slub per cpu partial pages */
100 struct page *next; /* Next partial slab */
101 #ifdef CONFIG_64BIT
102 int pages; /* Nr of partial slabs left */
103 int pobjects; /* Approximate # of objects */
104 #else
105 short int pages;
106 short int pobjects;
107 #endif
108 };
109 };
110
111 /* Remainder is not double word aligned */
112 union {
113 unsigned long private; /* Mapping-private opaque data:
114 * usually used for buffer_heads
115 * if PagePrivate set; used for
116 * swp_entry_t if PageSwapCache;
117 * indicates order in the buddy
118 * system if PG_buddy is set.
119 */
120 #if USE_SPLIT_PTLOCKS
121 spinlock_t ptl;
122 #endif
123 struct kmem_cache *slab; /* SLUB: Pointer to slab */
124 struct page *first_page; /* Compound tail pages */
125 };
126
127 /*
128 * On machines where all RAM is mapped into kernel address space,
129 * we can simply calculate the virtual address. On machines with
130 * highmem some memory is mapped into kernel virtual memory
131 * dynamically, so we need a place to store that address.
132 * Note that this field could be 16 bits on x86 … ![]()
133 *
134 * Architectures with slow multiplication can define
135 * WANT_PAGE_VIRTUAL in asm/page.h
136 */
137 #if defined(WANT_PAGE_VIRTUAL)
138 void *virtual; /* Kernel virtual address (NULL if
139 not kmapped, ie. highmem) */
140 #endif /* WANT_PAGE_VIRTUAL */
141 #ifdef CONFIG_WANT_PAGE_DEBUG_FLAGS
142 unsigned long debug_flags; /* Use atomic bitops on this */
143 #endif
144
145 #ifdef CONFIG_KMEMCHECK
146 /*
147 * kmemcheck wants to track the status of each byte in a page; this
148 * is a pointer to such a status block. NULL if not tracked.
149 */
150 void *shadow;
151 #endif
152 }
According to the definition of page, we cannot find the size of it.
Since it contains different structures inside…..
So need to check the linux/asm-i386/page.h
1#ifndef _I386_PAGE_H
2#define _I386_PAGE_H
3
4/* PAGE_SHIFT determines the page size */
5#define PAGE_SHIFT 12
6#define PAGE_SIZE (1UL << PAGE_SHIFT)
7#define PAGE_MASK (~(PAGE_SIZE-1))
And also has another way to check the size of page.
#include <stdio.h>
#include <unistd.h> /* sysconf(3) */
int main(void) {
printf(“The page size for this system is %ld bytes.\n”,
sysconf(_SC_PAGESIZE)); /* _SC_PAGE_SIZE is OK too. */
return 0;
}
On our 32 bits arch, this size is 4KB ( 4096 Bytes).
So the length of argument line is 32 * 4096 Bytes = 131072 Bytes.
The max files that can be processed by ls depending on the filename length of each file. The total length plus space char can not exceed 131072 Chars.
All this analysis is based on Linux kernel 2.6.11 X86 32 bits Arch.
temp01.dbf issue…..
temp01.dbf是数据库的临时数据文件,存放在临时表空间temp中,如何减小呢.
原因:没有给临时表空间设置上限.导致数据文件无限增大.
思路1:创建新的临时表空间,设置数据文件上限,删除原来的临时表空间
a.创建新的临时表空间
CREATE TEMPORARY TABLESPACE mytemp TEMPFILE ‘/alcatel/oracle/oradata/SNM/temp02.dbf SIZE 2G REUSE EXTENT MANAGEMENT local UNIFORM SIZE 256m;(不带自增长)
CREATE TEMPORARY TABLESPACE mytemp TEMPFILE ‘/alcatel/oracle/oradata/SNM/temp02.dbf’ SIZE 521M REUSE AUTOEXTEND ON NEXT 512M MAXSIZE 2G EXTENT MANAGEMENT local UNIFORM SIZE 256M;(自增长)
b.设置新的默认表空间
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE mytemp;
c.删除原来的临时表空间
DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES;
d.手动删除temp01.dbf文件(如果提示正在被使用,重启数据库就可以删除)
e.验证
SELECT * FROM DBA_TEMP_FILES;
思路2:直接对原来的临时表空间进行设置
a.ALTER DATABASE TEMPFILE’/alcatel/oracle/oradata/SNM/temp01.dbf’ RESIZE 2G;
或者
ALTER DATABASE TEMPFILE ‘/alcatel/oracle/oradata/SNM/temp01.dbf’ AUTOEXTEND ON NEXT 512M MAXSIZE 2G;
b.验证
SELECT * FROM DBA_TEMP_FILES;
zz 手动制作python的exe可执行程序
手动制作python的exe可执行程序 — by Leo Jay
Python没有内建一个编译为exe的功能。给python程序的部署带来不少的麻烦。
所以就会出现一些py2exe之类的很不错的工具,用于自动把.py文件编译为.exe文件。
最近抽空研究了一下手动实现类似py2exe的功能,希望加强对python的了解。
结果还相当不错。把结果记录下来,与大家共享。
原理
文中所描述的方法,基于python的以下几个功能
1. python程序运行时,会在sys.path指定的路径中查找库文件。
2. python从2.3开始,支持从zip文件中import库(支持.py,.pyc和.pyo,但不支持.pyd)
3. python提供C API,让c语言的程序,可以很方便的调用python的程序
实际步骤
注:假设python安装在c:\python25目录中,最后的可执行文件放到d:\dist目录中
1. 先去c:\python25\Lib目录,把所有文件都复制出来,比如复制到d:\pythonlib目录中
2. 开一个cmd窗口,进入d:\pythonlib目录中,运行 python -OO compileall.py -f . 把lib中的.py文件都编译成.pyo文件
3. 删除d:\pythonlib目录中所有的.py和.pyc文件,因为我们只要有.pyo文件就可以让这些库运行了。
4. 删除目录中所有用不着的文件,比如curses,test,idlelib,msilib等,以减少生成文件的体积。
5. 把这些库打包成一个zip文件,比如stdlib.zip,放到d:\dist目录中
6. 把c:\python25\dlls目录中的.pyd和.dll文件,复制到d:\dist\dlls目录中,当然,删除不可能用到的一些文件_msi.pyd,_ssl.pyd等等,可以减少文件的体积
7. 把自己写的程序,也按步骤2至步骤5所说的方法,打成一个mysrc.zip包,放到d:\dist目录中。 注意:自己写的程序的入口应该是main.pyo文件
8. 用以下C程序编译出一个可执行文件,比方说叫runpy.exe,也放到d:\dist中。
#include
#include
#include
#include
int main()
{
// 得到当前可执行文件所在的目录
char szPath[10240];
char szCmd[10240];
GetModuleFileName(NULL, szPath, sizeof(szPath));
char* p = strrchr(szPath, ‘\\’);
if (p == NULL)
{
printf(“Get module file name error!\n”);
return -1;
}
*p = 0;
// 设定运行时的PATH
sprintf(szCmd, “PATH=%s\\dlls;%%PATH%%”, szPath);
_putenv(szCmd);
// 把sys.path设定为['.', '自己的源代码zip文件', '标准库zip文件', 'dll目录']
// 然后调用main模块
sprintf(szCmd,
“import sys\n”
“sys.path=['.', r'%s\\mysrc.zip', r'%s\\stdlib.zip', r'%s\\dlls']\n”
“import main\n”,
szPath, szPath, szPath);
Py_OptimizeFlag = 2;
Py_NoSiteFlag = 1;
Py_Initialize();
PyRun_SimpleString(szCmd);
return 0;
}
9. 把python25.dll放到d:\dist目录中。
结束语
这样来,d:\dist目录中,一共只有4个文件加一个目录:
dlls目录:用于存放所有的dll文件和pyd文件
stdlib.zip文件:用于存放所有的python的.pyo文件格式的标准库
mysrc.zip文件:用于存放自己写的程序。注意,自己写的程序的入口在main.pyo中。
runpy.exe文件:程序的启动文件,启动后会设定python的sys.path,然后调用main模块
python25.dll文件:python的核心dll,runpy.exe依赖于这个dll
哈哈,相当的简洁明了吧。一共才4个文件一个目录,5MB都不到哦。
注:当然,这种打包方式第一次做的时候比较麻烦,但之后就可以只要把自己的程序打包就好了,其它的不用变。
而且,如果自己的程序经常做改动的话,自己的程序也可以不打包,直接放到d:\dist中,反正runpy.exe启动程序的时候,只要能正常运行import main就可以了。
有不少人写email给我,问我要我做的包。大家可以在这里下载基于2.5.2版本的包: python_dist.7z 以及基于3.1.2版本的包: python31-dist.7z
注:3.1.2依赖于visual c++ 2008 redistributable package. 如果在目标机器上没有安装,则程序运行不起来。
解开包后,只要用自己的程序替换mysrc.zip就可以使用了。
包里有runpy.exe和runpyw.exe两个文件。其中,runpy.exe是控制台程序,runpyw.exe是非控制台程序。这两个程序分别类似于python.exe和pythonw.exe。想让程序运行时出现一个控制台,就运行runpy.exe,如果不想出现黑黑的控制台,就运行runpyw.exe。
Alter Examples
//建测试表
create table dept(
deptno number(3) primary key,
dname varchar2(10),
loc varchar2(13)
);
create table employee_info(
empno number(3),
deptno number(3),
ename varchar2(10),
sex char(1),
phone number(11),
address varchar2(50),
introduce varchar2(100)
);
–
//0.重命名
//0.1 表:rename dept to dt;
rename dt to dept;
//0.2 列:alter table dept rename column loc to location;
alter table dept rename column location to loc;
//1.添加约束
//1.1 primary key
alter table employee_info add constraint pk_emp_info primary key(empno);
//1.2 foreign key
alter table employee_info add constraint fk_emp_info foreign key(deptno)
references dept(deptno);
//1.3 check
alter table employee_info add constraint ck_emp_info check
(sex in (‘F’,'M’));
//1.4 not null
alter table employee_info modify phone constraint not_null_emp_info not null;
//1.5 unique
alter table employee_info add constraint uq_emp_info unique(phone);
//1.6 default
alter table employee_info modify sex char(2) default ‘M’;
//2.添加列
alter table employee_info add id varchar2(18);
alter table employee_info add hiredate date default sysdate not null;
//3.删除列
alter table employee_info drop column introduce;
//3.修改列
//3.1 修改列的长度
alter table dept modify loc varchar2(50);
//3.2 修改列的精度
alter table employee_info modify empno number(2);
//3.3 修改列的数据类型
alter table employee_info modify sex char(2);
//3.4 修改默认值
alter table employee_info modify hiredate default sysdate+1;
//4.禁用约束
alter table employee_info disable constraint uq_emp_info;
//5.启用约束
alter table employee_info enable constraint uq_emp_info;
//6.延迟约束
alter table employee_info drop constraint fk_emp_info;
alter table employee_info add constraint fk_emp_info foreign key(deptno)
references dept(deptno)
deferrable initially deferred;
//7.向表中添加注释
comment on table employee_info is ‘information of employees’;
//8.向列添加注释
comment on column employee_info.ename is ‘the name of employees’;
comment on column dept.dname is ‘the name of department’;
//9.清除表中所有数据
truncate table employee_info;
//10.删除表
drop table employee_info;
–
//下面来看看刚刚才我们对表dept和表employee_info所做的更改
//user_constraints视图里面包含了刚刚才我们创建的所有约束,以及其他信息,
//你可以用desc user_constraints命令查看其详细说明
select constraint_name,constraint_type,status,deferrable,deferred
from user_constraints
where table_name=’EMPLOYEE_INFO’;
–
CONSTRAINT_NAME CONSTRAINT_TYPE STATUS DEFERRABLE DEFERRED
—————————— ————— ——– ————– ———
PK_EMP_INFO P ENABLED NOT DEFERRABLE IMMEDIATE
FK_EMP_INFO R ENABLED DEFERRABLE DEFERRED
NOT_NULL_EMP_INFO C ENABLED NOT DEFERRABLE IMMEDIATE
SYS_C005373 C ENABLED NOT DEFERRABLE IMMEDIATE
UQ_EMP_INFO U ENABLED NOT DEFERRABLE IMMEDIATE
CK_EMP_INFO C ENABLED NOT DEFERRABLE IMMEDIATE
//我们可以通过user_cons_columns视图查看有关列的约束信息;
select owner,constraint_name,table_name,column_name
from user_cons_columns
where table_name=’EMPLOYEE_INFO’;
–
OWNER CONSTRAINT_NAME TABLE_NAME COLUMN_NAME
—————————— —————————— —————————— —————
YEEXUN PK_EMP_INFO EMPLOYEE_INFO EMPNO
YEEXUN CK_EMP_INFO EMPLOYEE_INFO SEX
YEEXUN NOT_NULL_EMP_INFO EMPLOYEE_INFO PHONE
YEEXUN SYS_C005373 EMPLOYEE_INFO HIREDATE
YEEXUN UQ_EMP_INFO EMPLOYEE_INFO PHONE
YEEXUN FK_EMP_INFO EMPLOYEE_INFO DEPTNO
//我们将user_constraints视图与user_cons_columns视图连接起来
//查看约束都指向哪些列
column column_name format a15;
select ucc.column_name,ucc.constraint_name,uc.constraint_type,uc.status
from user_constraints uc,user_cons_columns ucc
where uc.table_name=ucc.table_name and
uc.constraint_name=ucc.constraint_name and
ucc.table_name=’EMPLOYEE_INFO’;
–
COLUMN_NAME CONSTRAINT_NAME CONSTRAINT_TYPE STATUS
————— —————————— ————— ——–
EMPNO PK_EMP_INFO P ENABLED
DEPTNO FK_EMP_INFO R ENABLED
PHONE NOT_NULL_EMP_INFO C ENABLED
HIREDATE SYS_C005373 C ENABLED
PHONE UQ_EMP_INFO U ENABLED
SEX CK_EMP_INFO C ENABLED
–
//这里有个constraint_type,他具体指下面几种类型:
//C:check,not null
//P:primary key
//R:foreign key
//U:unique
//V:check option
//O:read only
–
//我们可以通过user_tab_comments视图获得对表的注释
select * from user_tab_comments
where table_name=’EMPLOYEE_INFO’;
TABLE_NAME TABLE_TYPE COMMENTS
—————————— ———– ————————–
EMPLOYEE_INFO TABLE information of employees
–
//我们还可以通过user_col_comments视图获得对表列的注释:
select * from user_col_comments
where table_name=’EMPLOYEE_INFO’;
–
TABLE_NAME COLUMN_NAME COMMENTS
—————————— —————————— —————————
EMPLOYEE_INFO EMPNO
EMPLOYEE_INFO DEPTNO
EMPLOYEE_INFO ENAME the name of employees
EMPLOYEE_INFO SEX
EMPLOYEE_INFO PHONE
EMPLOYEE_INFO ADDRESS
EMPLOYEE_INFO ID
EMPLOYEE_INFO HIREDATE
–
select * from user_col_comments
where table_name=’EMPLOYEE_INFO’ and
comments is not null;
–
TABLE_NAME COLUMN_NAME COMMENTS
—————————— —————————— ————————
EMPLOYEE_INFO ENAME the name of employees
–
//最后我们来查看一下修改后的表:
desc employee_info;
Name Type Nullable Default Comments
——– ———— ——– ——— ———————
EMPNO NUMBER(2)
DEPTNO NUMBER(3) Y
ENAME VARCHAR2(10) Y the name of employees
SEX CHAR(2) Y ‘M’
PHONE NUMBER(11)
ADDRESS VARCHAR2(50) Y
ID VARCHAR2(18) Y
HIREDATE DATE sysdate+1
–
desc dept;
Name Type Nullable Default Comments
—— ———— ——– ——- ———————-
DEPTNO NUMBER(3)
DNAME VARCHAR2(10) Y the name of department
LOC VARCHAR2(50) Y
