发布新日志

  • 一个Aache服务崩溃测试复现的案例分享

    2012-01-17 19:02:39

    路径:

    1、给一个岗位分配较大的权限(目的是为了登录时慢些,使之报登录超时或通信异常,比如给岗位设置上百个岗位隶属关系),然后登录

    2、当报登录超时后,再继续登录一次

    问题表现:

    如果apache服务端是双核,

    1凡是一个账号出现登录超时的情况,Httpd进程所占CPU就会50%,再登录一次,会再上升50%,即使退出所有客户端,CPU也不会释放(除非重启服务),因此现场服务即使是多核,如果出现超时的账号稍微多一点,就会导致Apache服务CPU被耗光

    2登录时并没有达到我们所设置的超时时间(5min or 6min)系统就会报:超时或通信异常1-2min左右)

    3、使用apache自带的server-status分析线程占用情况,如果有客户端出现非法退出的情况,线程并不是   立马释放,而是过几秒释放,所以如果现场出现此问题情况较多时,即使是500个线程(40个账号),也是可能out of threads

    参考:经过测试,一个账号登录时,会同时占用2-4个线程不等,其余的操作大部分占1-2个线程

    日志及elf文件:与现场吻合

    1Appserverelf(经过测试,凡是出现超时,appserverelf文件就会报下面这个,分析现场elf文件,apache出问题前,出现了大量的这类错误,且apache  access log中有大量用户登录):

    [{FEE617CC-1FDD-4BDD-AC0C-5325F7D46AA7}]对应的用户不存在

    2Apache error log(一旦出现超时,线程不被及时释放,导致out of threads:

    [Tue Nov 29 15:45:38 2011] [warn] Server ran out of threads to serve requests. Consider raising the ThreadsPerChild setting

    [Tue Nov 29 15:46:53 2011] [warn] (OS 64)指定的网络名不再可用。  : winnt_accept: Asynchronous AcceptEx failed.

    [Tue Nov 29 15:46:53 2011] [warn] (OS 64)指定的网络名不再可用。  : winnt_accept: Asynchronous AcceptEx failed.

    [Tue Nov 29 15:46:53 2011] [warn] (OS 64)指定的网络名不再可用。  : winnt_accept: Asynchronous AcceptEx failed.

    [Tue Nov 29 15:46:53 2011] [warn] (OS 64)指定的网络名不再可用。  : winnt_accept: Asynchronous AcceptEx failed.

    后记:

    各平台版本需要解决如下问题:

    1、登录超时后apache CPU资源不释放问题

    2、未达到超时时间就报超时的问题

    修改后,测试再进行一次验证

     

    也可能超时只是复现此问题的方法之一,

    6集中并发登录测试时没有出现此问题的原因很明显,就是权限小登录快不会大量用户报超时(6的表现是通信异常,不报超时)

     

    截止现在,apache出现问题时的错误表现一共有:

    1ran out of threads、指定网络名不再可用、测试服务失败(已复现,避免ran out of threads可以通过设置apachethreadsperchild选项)

    2、内存吃光:apache error.log中有大量的Not enough space: mpm_get_completion_context: Failed to create the transaction pool(未复现)

     

    问题2内存吃光的原因初步诊断为存在内存泄露,或长时间大量应用导致

    MaxRequestperchild我们的系统未设置,默认是0,表明资源会一直不释放,直到服务重起,目前因还没有一个合理的测试值,设大了吃内存,设小了影响效率,后续我们再安排测试
  • 张银奎老师《软件瑕疵的最佳实践》学习笔记

    2010-12-21 12:19:35

    1、对于一些软件比如对安全性要求较高的金融软件,宁可让一个小bug将系统搞崩溃掉也不要绕过这个bug让系统继续运行,因为一旦出现类似帐不平的问题,损失将是巨大的,所以从软件测试的角度来讲,针对不同的业务,对bug等级及优先级的定位、对bug的处理方式都是不一样的;同理,对安全性要求较高的系统,调试版本可能会比release版本更可靠。
    2、他山之石、可以攻玉
    3、50%的hack通过缓冲区溢出等方式获取相关地址,然后把病毒注入
    4、软件开发过程中为测试提供更多的接口将可以提升软件的可测试性,为自动化测试提供基础
    5、测试人员可以与开发人员亦敌亦友
    6、老马识途,越是有能力的人做出来的软件质量越高
    7、转储:将内存中的错误信息以文本文件等的方式输出出来,生成错误报告,因为内存中的信息是容易挥发的
    8、微软的遥感技术:将用户使用微软产品过程中遇到的问题自动生成错误报告自动发送到微软相关的服务器上,这个我们的软件也可以借鉴,不过自动诊断、定位并搜集发送错误报告需要启动另外一个进程
    9、一般的Log文件处理时都会有隐含锁,可能会有等待等情况导致性能问题,所以加Log、诊断、跟踪等相关功能时需要考虑对于系统性能的影响
    10、PDB文件中含有调试和项目的状态信息,所以从安全的角度讲一般都不要暴露给别人
    11、DFX/DFD,desigh for debug/test/....
    12、Grace fot fail
    13、托管代码:microsoft的中间语言,他主要的作用是在.NET FRAMEWORK的CLR执行代码前去编译源代码,也就是说托管代码充当着翻译的作用,源代码在运行时分为两个阶段:1.源代码编译为托管代码,(所以源代码可以有很多种,如VB,C#,J#) 2.托管代码编译为microsoft的平台专用语言。
    14、Access violation at address <十六进制值> in module <应用程序名> Read of address <十六进制值>
    Windows用户可能经常会看到类似于错误提示:“Error:Access violation at address 836556F8
    (004096da). Read of address 836556F8(00401000)”
    通常的原因如下:
    (1)调用一个不存在的对象
    大部分Access violation的合理原因是使用了没有被创建或者已经被释放的对象。为了防止
    这种类型的Access violation的发生,请确保你访问的任何对象都首先被创建了。例如,当一个Table定
    位在一个没有被创建的data module(从auto-crete窗口里移走了)里,你可能在窗体的OnCreate事件里
    打开这个表。
    在下面的代码里,在调用一个已经被删除了的对象(b:TBitmap)事件后,一个Access violation出现了

    var b:TBitmap;
    begin
    b:=TBitmap.Create;
    try
    //对b对象进行一些操作
    finally
    b.free;
    end;
    ...
    //由于b已经被释放,一个Access violation错误将会出现
    b.Canvas.TextOut(0,0,’这是一个 Access Violation’);
    end;
    (2)不存在的API参数
    如果你试图给Win API函数传递一个不存在的参数将会出现一个Access violation错误。解决此类Access
    violation错误的最好方法是查阅Win API帮助,看看这个API函数调用的参数信息以及参数类型。例如,
    总是保证不给一个缓冲参数传递一个无效指针。
    (3)让Delphi释放
    当一个对象拥有另一个对象时,让它给你做删除工作。因为默认情况下,所有的窗体(自动创建的)都
    属于Application对象。当一个应用程序结束时,它释放了Application对象,也就释放了所有窗体。例
    如,如果你在程序开始时自动创建了两个窗体(Form1/Unit1和Form2/Unit2),下面的代码就会导致
    Access violation错误的出现:
    unit Unit1;
    ...
    uses unit2;
    ...
    procedure TForm1.Call_Form2
    begin
    Form2.ShowModal;
    Form2.Free;
    //Access violation错误将会出现
    Form2.ShowModal;
    end;
    (4)杀死异常
    永远不要破坏临时异常对象(E),处理一个异常会自动释放异常对象。如果你自己手动释放了异常对象
    ,程序会试图再次释放它,那么就会出现Access violation错误:
    Zero:=0;
    try
    dummy:= 10 / Zero;
    except
    on E: EZeroDivide do
    MessageDlg(’不能用0做除数!’,mtError, [mbOK], 0);
    E.free. ////Access violation错误将会出现
    end;
    (5)检索一个空字符串
    一个空字符串是没有任何数据的。就是说,检索一个空字符串相当于访问一个不存在的对象,这将导致
    Access violation错误:
    var s: string;
    begin
    s:=’’;
    s[1]:=’a’;
    //Access violation错误将会出现
    end;
    (6)直接引用指针
    你必须间接引用指针,否则你会改变指针地址并可能会破坏其他存储单元 :
    procedure TForm1.Button1Click(Sender: TObject);
    var
    p1 : pointer;
    p2 : pointer;
    begin
    GetMem(p1, 128);
    GetMem(p2, 128);
    //下一行导致Access violation错误
    Move(p1, p2, 128);
    //下一行方法正确
    Move(p1^, p2^, 128);
    FreeMem(p1, 128);
    FreeMem(p2, 128);
  • 有关数据库性能优化

    2010-10-18 16:22:17

    一、索引
    索引虽然可以提升查询的效率,但需要正确的使用索引,建立有价值的索引,避免使用冗余索引;注意最理想的情况是所有的索引都可以直接在内存中查找,而不需要访问磁盘;索引本身会占很多的磁盘空间,很多时候索引甚至比数据本身还要大,存储空间比计算时间要廉价的多,牺牲空间换取时间是值得的
    二、锁定
    我们可以认为查询的时间开销主要包括两部分,即查询本身所耗时间及查询开始前的等待时间,索引影响后者,锁定则影响前者,对锁优化的目标显然是减少等待时间。
    合理正确使用数据库锁相关知识较多,后续跟进
    三、缓存
    访问内存比访问硬盘快得多,在接下来几年中,除非硬盘体系结构有重大改进,不然这一情况很可能会持续。缓存这一将数据存储于内存而非硬盘中的过程由此应运而生:用户从缓存而非数据库所驻留的磁盘中获取数据。在不考虑其它因素的情况下,从内存中读取数据要比从硬盘中读取数据快10000倍。这主要是内存与硬盘的速度差异所造成的。http://database.ctocio.com.cn/247/8883747.shtml
    有关cache hit ratio:
     就是终端用户访问加速节点时,如果该节点有缓存住了要被访问的数据时就叫做命中,如果没有的话需要回原服务器取,就是没有命中。取数据的过程与用户访问是同步进行的,所以即使是重新取的新数据,用户也不会感觉到有延时。
      命中率=命中数/(命中数+没有命中数)
      缓存命中率是判断加速效果好坏的重要因素之一
      影响缓存命中率的因素
      缓存的命中率取决于很多的因素:
      1、应用场景
      是OLTP还是OLAP应用,即使是OLTP,也要看访问的频度,一个极少被访问到的缓存等于没有什么效果。一般来说,互联网网站是非常适合缓存应用的场景。
      2、缓存的粒度
      毫无疑问,缓存的粒度越小,命中率就越高,对象缓存是目前缓存粒度最小的,因此被命中的几率更高。举个例子来说吧:你访问当前这个页面,浏览帖子,那么对于ORM来说,需要发送n条SQL,取各自帖子user的对象。很显然,如果这个user在其他帖子里面也跟贴了,那么在访问那个帖子的时候,就可以直接从缓存里面取这个user对象了。
      3、架构的设计
      架构的设计对于缓存命中率也有至关重要的影响。例如你应该如何去尽量避免缓存失效的问题,如何尽量提供频繁访问数据的缓存问题,这些都是考验架构师水平的地方。再举个例子来说,对于论坛,需要记录每个topic的浏览次数,所以每次有人访问这个topic,那么topic表就要update一次,这意味着什么呢?对于topic的对象缓存是无效的,每次访问都要更新缓存。那么可以想一些办法,例如增加一个中间变量记录点击次数,每累计一定的点击,才更新一次数据库,从而减低缓存失效的频率。
      4、缓存的容量和缓存的有效期
      缓存太小,造成频繁的LRU,也会降低命中率,缓存的有效期太短也会造成缓存命中率下降。
      所以缓存命中率问题不能一概而论,一定说命中率很低或者命中率很高。但是如果你对于缓存的掌握很精通,有意识的去调整应用的架构,去分解缓存的粒度,总是会带来很高的命中率的。
    四、数据库连接池
    连接池技术的核心思想是:连接复用,通过建立一个数据库连接池以及一套连接使用、分配、治理策略,使得该连接池中的连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。简单理解:牺牲资源换时间,找大合适的连接数需要反复验证。
     
  • 学习笔记-sqlserver2005的数据库快照

    2010-10-17 14:05:03

    1、为什么使用?
       快照的作用主要是能够进行在线数据恢复,当存储设备发生应用故障或者文件损坏时可以进行及时数据恢复,将数据恢复成快照产生时间点的状态。快照的另一个作用是为存储用户提供了另外一个数据访问通道,当原数据进行在线应用处理时,用户可以访问快照数据,还可以利用快照进行测试等工作;或者理解为,高级复制, 就是数据库采集下系统某一时刻的数据,将数据存入数据库中,利用不同时间点间的快照,可以生成报告,用来监测系统在这段时间的性能趋势!
    2、什么时候使用?
       如果要在一个特定的时间分析数据库中的数据,你会怎么做?例如,你想要分析晚上12点的数据,你会采取什么样的措施?最经常用到的方法,创建一个计划任务,在晚上12点的时候执行备份,将当前数据库以一个新的名字备份到服务器上,然后再开始分析这个备份数据库中的数据。这样做的问题就在于,如果这个数据库很大,那么备份它就需要花费大量的时间和磁盘空间。如果你需要在数据访问高峰期做备份的话,它花费的资源足以让你的服务器宕机。
    3、如何使用?
    4、优缺点
    优点:
    1.数据库快照最大的优点就在于它可以作为一个报告数据库。因为数据库快照是主数据库的一个只读副本,对一个数据库快照执行报告能够大大的减少加载时间。
    2.数据库快照只需要几个特征值就可以恢复源数据库。
    缺点:
    1.数据库快照最主要的缺点就是它只能在SQL Server企业版上使用。我们都知道,企业版的成本很好,因此不是每一个人都能够使用这一项功能。
    2.数据库快照是依附于主数据库,因此不能单独使用。
    3.数据库快照中不支持全文检索。
    结论:
    数据库快照是SQL Server企业版中一个非常方便的功能。然而,需要强调的是,数据库快照不能替代数据库备份。如果你想很好的利用这项有用的功能,可以在数据报告中多使用它。
    对性能测试的提醒:
    数据库规模较大时可采用快照功能
    多个时间点快照下的性能变化趋势
  • 有关测试的业务及代码覆盖率分析

    2010-08-23 15:28:31

       做了这么多年的自动化测试,一直没有一个非常清晰的自动化覆盖,同时曾对自动化对业务场景(用例)、bug等的覆盖做过相关的分析,但由于庞大的业务系统不支持我们将所有的测试细化成小粒度测试用例的级别(不是不可以做,只是考虑资源及系统现状)、且测试用例难于穷尽(重点、非重点)、目前系统所处的阶段分析等考虑对已有bug的覆盖价值不大等等,导致分析一直处于一个挺尴尬的局面,当大家问起时,只能先给一个基准,比如基于模块的覆盖情况、基于界面控件覆盖情况、基于算法的覆盖情况等,由于统计对业务逻辑关系的覆盖情况依赖于我们的测试用例设计的成熟度,所以一直是在变的。
       以上说的都是自动化测试对于测试或业务本身的覆盖情况,即使做了以上分析,领导们或者部分开发人员仍然会问:你的测试对我们的代码覆盖情况如何,到了客户那里还可能出现其他的问题吗?所以上周采用AQtime对开发的代码进行了一些分析,工具具体的应用方法大家可以查到很多的学习资料,这里不强调,对于工具使用本身,只简单分享几个要注意的点:
    (1)小心当你的代码或测试时间太长时,日志文件搞到AQtime崩溃
    (2)将代码进行分类,分角度分别进行代码覆盖分析,比如或者户端代码、公共代码、不同服务端代码,或者其他不同功能代码,不然统计出来的结果价值不大,鉴于AQtime工具本身的性能问题,这点又额外显得更为重要
    (3)不要对代码覆盖寄予过多期望,因为我们只能从行、类、函数等方面进行覆盖分析,但可能一行代码包含多个测试点,也可能多行代码包含一个测试点,所以要结合业务、用例覆盖一起分析,另外说下我们做代码覆盖分析的意义,
    1、我们组的自动化每天都在跑,究竟覆盖了哪些代码,哪些代码还没有覆盖到?有了自动化代码覆盖分析,可以做到开发人员心里有底
    2、指出未覆盖部分,然后测试人员与开发人员沟通后重点测试
    3、参考:估计修改已有代码所需的时间:经过测试的代码更容易重构、维护和增强,知道代码有没有被测试,并看看实际的测试覆盖数值,可以让开发人员和管理人员更准确地预知修改已有代码所需的时间
     
  • 性能测试之服务端硬件配置分析

    2010-05-16 13:45:19

            产品发布时我们要告诉用户我们的系统可以在什么样的硬件配置及网络环境下达到性能最优,或者什么样的配置或带宽分别可以支撑多少用户无障碍正常使用,这是我们的职责。

             目前我们在这方面进行了一些探索,但并没有在不同的配置环境下进行建模分析,下面的几个分析先做此专题一个开头:

    1、Web Server:

    最容易出现并发问题,所以对多核多线程的要求最高,需要多CPU,

    然后是网络情况

    对内存要求不太高

    2、File Server :

    影响性能的主要因素为数据传输及网络系统的速度;

    然后是硬盘要足够大

    处理器速度对文件服务器的性能影响不大;

    对于大规模网络环境,Filserver最好靠近核心交换机的高速主干网

    3、DBServer:

    由于数据库服务器主要提供数据增删该查,需要处理大量频繁的随机I/O请求,并进行精密计算;所以影响其性能的主要有(按照影响程度先后顺序):

    (1)内存(Memory),要求最高

    (2)处理器(Processor),要求次之

    (3)硬盘(Disk),要求次之

    4、Appserver:

    主要对Cpu要求高

     

  • 学习笔记-sqlserver常用调优指标

    2010-04-06 22:30:35

     

     SQLServer 资源监控中指标缓存点击率(Cache Hit Ratio),该值越高越好。如果持续低于80%,应考虑增加内存。
     如果Full Scans/sec(全表扫描/秒)计数器显示的值比1 或2 高,则应分析你的查询以确定是否确实需要全表扫描,以及SQL 查询是否可以被优化。
     Number of Deadlocks/sec(死锁的数量/秒):死锁对应用程序的可伸缩性非常有害,并且会导致恶劣的用户体验。该计数器的值必须为0。
     Lock Requests/sec(锁请求/秒),通过优化查询来减少读取次数,可以减少该计数器的值。
     User Connections (用户连接数,也就是数据库的连接数量);
     Number of deadlocks/Sec/-Total (数据库死锁)
     Memory\ Availalle Mbyte 内存监控(可用内存)
     Physicsdisk \disk time \-Total(磁盘读写总时间)(出现瓶颈时检查读磁盘的时间长还是写磁盘的时间长)
     Butter Caile hit(数据库缓存的选取命中率) 数据库的命中率不能低于92%
  • svn的externals的实现方法

    2010-03-01 22:17:55

    应用前提:
    多个目录共用一个公共文件,可以将每个目录建立externals对公共文件进行引用
    操作步骤:
    第一,创建目录
    第二,选中该目录,为其设置SVN属性,如下:
       选择快捷菜单中“TortoiseSVN->Properties”
         从下拉列表框选择svn:externals,并设置其属性值
       格式:本地目录路径 远程库URL路径
    第三,update
    第四,commit
    应用范围:
    自动化脚本公共包的引用
  • psexec用法

    2010-02-28 22:37:59

    简介
      实用工具(如 Telnet)和远程控制程序(如 Symantec 的 PC Anywhere)使您可以在远程系统上执行程序,但安装它们非常困难,并且需要您在想要访问的远程系统上安装客户端软件。PsExec 是一个轻型的 telnet 替代工具,它使您无需手动安装客户端软件即可执行其他系统上的进程,并且可以获得与控制台应用程序相当的完全交互性。PsExec 最强大的功能之一是在远程系统和远程支持工具(如 IpConfig)中启动交互式命令提示窗口,以便显示无法通过其他方式显示的有关远程系统的信息。
      注意:某些反病毒扫描程序会报告其中的一个或多个工具感染了“远程管理”病毒。这些 PsTools 都不带病毒,但是如果病毒使用了这些工具,则它们可能触发病毒通知。
      安装
      只需将 PsExec 复制到可执行路径。键入“psexec”可显示其使用语法。
      PsExec 可在 Windows Vista、NT 4.0、Win2K、Windows XP 和 Server 2003(包括 64 位版本的 Windows)上运行。
      用法:
      用法:psexec [\\computer[,computer2[,...] | @file][-u user [-p psswd]][-n s][-l][-s|-e][-x][-i [session]][-c [-f|-v]][-w directory][-d][-][-a n,n,...] cmd [arguments]
      computer
      指示 PsExec 在指定的一台或多台计算机上运行应用程序。如果省略计算机名称,则 PsExec 将在本地系统上运行应用程序;如果输入计算机名称“\\*”,则 PsExec 将在当前域中的所有计算机上运行应用程序。
      @file
      指示 PsExec 在指定的文本文件中列出的每台计算机上运行命令。
      -a
      用逗号分隔可以运行应用程序的处理器,CPU 编号最小为 1。例如,要在 CPU 2 和 CPU 4 上运行应用程序,请输入:“-a 2,4”
      -c
      将指定的程序复制到远程系统以便执行。如果省略此选项,则应用程序必须位于远程系统上的系统路径中。
      -d
      不等待应用程序终止。请只对非交互式应用程序使用此选项。
      -e
      不加载指定帐户的配置文件。
      -f
      将指定的程序复制到远程系统,即使远程系统中已存在该文件。
      -i
      运行程序,以便它与远程系统中指定会话的桌面进行交互。如果未指定会话,则进程将在控制台会话中运行。
      -l
      以受限用户身份(去除 Administrators 组的权限,并且只允许使用分配给 Users 组的权限)运行进程。在 Windows Vista 上,此进程将以“低完整性”运行。
      -n
      指定与远程计算机连接的超时(秒)。
      -p
      指定用户名的密码(可选)。如果省略此选项,系统将提示您输入隐藏密码。
      -s
      在系统帐户中运行远程进程。
      -u
      指定用于登录远程计算机的可选用户名。
      -v
      仅在指定文件具有更高版本号或该文件比远程系统上的文件新时复制该文件。
      -w
      设置进程的工作目录(相对于远程计算机)。
      -x
      在 Winlogon 桌面上显示 UI(仅限于本地系统)。
      -priority
      指定 –low、-belownormal、-abovenormal、-high 或 -realtime 按不同优先级运行进程。
      program
      要执行的程序的名称。
      arguments
      要传递的参数(请注意,文件路径必须是目标系统中的绝对路径)
      对于其名称中含有空格的应用程序,可以在其两侧加引号,例如,psexec \\marklap "c:\long name\app.exe"。按下 Enter 键时,仅将输入内容传递到远程系统。键入 Ctrl-C 可终止远程进程。
      如果省略用户名,则远程进程将以执行 PsExec 时所使用的相同帐户运行,但由于远程进程以模仿方式运行,因此它无权访问远程系统上的网络资源。指定用户名时,远程进程将以指定的帐户执行,并可访问该帐户有权访问的任何网络资源。请注意,密码是以明文形式传递到远程系统的。
      当目标系统是本地系统时,由于 PsExec 不需要您具有管理员权限,因此您可以使用当前版本的 PsExec 来取代 Runas。
      示例:
      以下命令可在 \\marklap 上启动交互式命令提示窗口:
      psexec \\marklap cmd
      此命令通过 /all 开关在远程系统上执行 IpConfig,并在本地显示输出结果:
      psexec \\marklap ipconfig /all
      此命令将程序 test.exe 复制到远程系统,并以交互方式执行此程序:
      psexec \\marklap -c test.exe
      如果远程系统中已经安装的程序不在系统路径中,请指定该程序的完整路径:
      psexec \\marklap c:\bin\test.exe
      在系统帐户中以交互方式运行 Regedit,以便查看 SAM 和 SECURITY 注册表项的内容:
      psexec -i -d -s c:\windows\regedit.exe
      要以受限用户权限运行 Internet Explorer,请使用此命令:
      psexec -l -d "c:\program files\internet explorer\iexplore.exe"
     
  • 学习笔记

    2010-02-28 22:15:54

    1、SQL2005支持在线的重建、修改索引,在线快速恢复和还原数据库等等操作。SQL2005的主动通知功能和数据库镜像的功能,可以保持数据库的缓存数据刷新和避免双机热备的单点故障,等等这些都是对系统稳定的一些很好的保障。SQL2005的性能优化顾问和动态管理视图,可以随时检测系统资源的占用情况,并对占用资源较多的SQL语句记录和优化,在性能优化顾问中给出优化的建议(SQL2005相关新功能参考“SQL Server 2005性能测试概览及功能简析”)。
    2、我们的Think time需要去设上一个尽可能贴近实际的思考时间去模拟这个实际场景
    3、硬件角度来看,如果服务器内存比较小的话,在做大的数据量查询的时候没有办法把非常大的数据量一次性放到系统的内存里,还会保留一部分在磁盘上。这时候进行查询的话,它需要频繁对磁盘去做一些IO读写的操作。大家都知道,内存的速度是要远远大于你磁盘IO的速度。所以说这时候的瓶径很大原因在磁盘上边。而现实中的操作里,查询数据量一旦小了下来,比如说只查询一个月的。这时即便系统的内存有些小也可以一次性的将的数据都放到内存里执行,这样查询速度也是非常快的。
     
  • 有关BI(转)

    2009-12-14 10:49:47

        商业智能(Business Intelligence,简称BI)的概念最早是Gartner Group于1996年提出来的。当时将商业智能定义为一类由数据仓库(或数据集市)、查询报表、数据分析、数据挖掘、数据备份和恢复等部分组成的、以帮助企业决策为目的技术及其应用。当时,Gartner Group预测说:到2000年,信息民主(注:指组织内信息共享的无差别性)将在具有前瞻性思维的企业中浮现。借助商业智能,员工、咨询员、客户、供应商以及公众能够有效地运用信息。其实,商业智能所涉及的技术与应用,在Gartner Group命名之前就有,起初被称为经理信息系统(EIS),在羽化成商业智能之前叫决策支持系统(DSS)。

        目前,商业智能通常被理解为将企业中现有的数据转化为知识,帮助企业做出明智的业务经营决策的工具。这里所谈的数据包括来自企业业务系统的订单、库存、交易账目、客户和供应商资料来自企业所处行业和竞争对手的数据以及来自企业所处的其他外部环境中的各种数据。而商业智能能够辅助的业务经营决策,既可以是操作层的,也可以是战术层和战略层的决策。为了将数据转化为知识,需要利用数据仓库、联机分析处理(OLAP)工具和数据挖掘等技术。因此,从技术层面上讲,商业智能不是什么新技术,它只是数据仓库、OLAP和数据挖掘等技术的综合运用。

    为此,把商业智能看成是一种解决方案应该比较恰当。BI的关键是从许多来自不同的企业运作系统的数据中,提取出有用的数据,进行清理以保证数据的正确性,然后经过抽取(Extraction)、转换(Transformation)和装载(Load),即ETL过程,合并到一个企业级的数据仓库里,从而得到企业数据的一个全局视图,在此基础上利用合适的查询和分析工具、数据挖掘工具、OLAP工具等对其进行分析和处理(这时信息变为辅助决策的知识),最后将知识呈现给管理者,为管理者的决策过程提供支持。商业智能的这个基本过程如图所示。

    因此,BI是涉及一个很宽领域的,集收集、合并、分析和提供信息存取功能为一身的解决方案,包括ETL软件、数据仓库、数据集市、数据查询和报告、多维/联机数据分析、数据挖掘和可视化工具

        在当今的商业环境中,那些看似杂乱无章、错综复杂的信息往往隐藏着巨大的商业价值。能否从中分析提炼出有价值的信息,进而支持管理者做出及时、正确的决策,这对企业应对复杂的竞争是相当重要的。虽然工商银行、民生银行、广东发展银行等金融企业,和乐百氏、双汇这类传统企业都在着手建立BI系统,但目前还无法验证应用的效果到底如何。

        据相关统计数字显示,在国外,投资建设BI的企业有60%~70%以失败告终;而在中国,这个数据可能会更高。其中的原因有很多,比如缺乏历史数据支持、理解上存在误区等等。双汇集团CIO刘小兵认为:“虽然BI技术并不复杂,但若要它发挥应有的作用,至少要有3~5年的历史数据积累来辅助研究,不然投入再大也是徒劳。”

      BI应用的三大障碍

    那些能够成功地利用手中所掌握的信息资源的企业,它们必然清楚地知道信息所能带来的商业利益,不单是提升硬件上的效率,而且在提高销售业绩、改进工作效率和增强客户满意度等软的领域获益匪浅。

    但对于大多数企业而言,信息至今仍是一笔未被充分挖掘的资产,也就是说,大多数企业还没有从花费巨资所构建的信息系统中享受到应有的益处。那么在企业部署BI的过程中,常常会遇到哪些障碍呢?

    首先是不能提供可靠的信息。

    据《商业周刊》去年的研究显示,43%的商业人士不能确信他们企业内部的信息是否准确,77%的被访者表示他们因为缺乏可信的信息而做出过失败的决策。这其中,数据的质量存在很大的问题。

    比如本土银行,它们的数据库中的信息少则几千万条,多则几亿条。数量是足够庞大了,但质量如何呢?同名账户、废弃账户,一个人有多个账户,这些信息需要专业的工具来清洗和改良,还要预防质量低下的数据输入系统。外资银行在业务流程中,就特别地强调客户信息搜集的准确性,这使得它们在把握客户需求和产品创新上占得了优势。

    其次是能否针对非技术人员设计出简便而形象的用户界面。

    对于非技术人员而言,系统操作的简便程度如何,很可能成为能否普及BI的一大关键。也就是说,最终用户希望简捷、自动地获取信息,而不是被迫学习和认知一个全新的环境,或者依赖于IT部门的帮助。特别是,商业决策的制定从来不是靠某个人在真空的环境中完成的这需要用户围绕着信息数据开展协同和商讨之后才能做出,这就要求有一个易于操作的环境。

    BI应用的部署与管理也应该简便易行,越来越多的企业用户希望找到打包的、易于实施的中端市场解决方案或者软件服务项目,这样他们可以在网上直接访问到BI的应用,不需要安装任何其他的软件程序。

  • netstat命令(转)

    2009-12-09 10:22:25

    1、检测网络连接

    如果怀疑自己的计算机上被别人安装了木马,或者是中了病毒,可以使用Windows自带的网络命令来看看谁在连接你的计算机。具体的命令格式是:netstat -an 这个命令能看到所有和本地计算机建立连接的IP,它包含四个部分——proto(连接方式)、local address(本地连接地址)、foreign address(和本地建立连接的地址)、state(当前端口状态)。通过这个命令的详细信息,我们就可以完全监控计算机上的连接,从而达到控制计算机的目的。

    我们在命令提示符中输入如下:netstat -a 显示出你的计算机当前所开放的所有端口 ,netstat -s -e 比较详细的显示你的网络资料,包括TCP、UDP、ICMP 和 IP的统计等大家可能都见过了。那有没有想过更胜层次的了解Vista、Windows7显示协议统计和当前 TCP/IP 网络连接的知识呢?

    netstat命令用法如下(提示:其中按有a-b的顺序排列)——

    NETSTAT:Vista / Windows7 下显示协议统计和当前 TCP/IP 网络连接。可以直接运行netstat不加参数,如图:

    NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-t] [interval]

    -a 显示所有连接和侦听端口。

    -b 显示在创建每个连接或侦听端口时涉及的可执行程序。在某些情况下,已知可执行程序承载多个独立的组件,这些情况下,显示创建连接或侦听端口时涉及的组件序列。此情况下,可执行程序的名称位于底部[]中,它调用的组件位于顶部,直至达 到 TCP/IP。注意,此选项可能很耗时,并且在您没有足够权限时可能失败。

    -e 显示以太网统计。此选项可以与 -s 选项结合使用。

    -f 显示外部地址的完全限定域名(FQDN)。

    -n 以数字形式显示地址和端口号。

    -o 显示拥有的与每个连接关联的进程 ID。

    -p proto 显示 proto 指定的协议的连接;proto 可以是下列任何一个: TCP、UDP、TCPv6 或 UDPv6。如果与 -s 选项一起用来显示每个协

    议的统计,proto 可以是下列任何一个: IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP或 UDPv6。

    -r 显示路由表。

    -s 显示每个协议的统计。默认情况下,显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计;-p 选项可用于指定默

    认的子网。

    -t 显示当前连接卸载状态。

    interval 重新显示选定的统计,各个显示间暂停的间隔秒数。按 CTRL+C 停止重新显示统计。

    2、禁用不明服务

    很多朋友在某天系统重新启动后会发现计算机速度变慢了,这个时候很可能是别人通过入侵你的计算机后给你开放了特别的某种服务,比如IIS信息服务等。可以通过“net start”来查看系统中究竟有什么服务在开启,如果发现了不是自己开放的服务,我们就可以有针对性地禁用这个服务了。方法就是直接输入“net start”来查看服务,再用“net stop server”来禁止服务。

    3、轻松检查账户

    很长一段时间,恶意的攻击者非常喜欢使用克隆账号的方法来控制你的计算机。他们采用的方法就是激活一个系统中的默认账户,但这个账户是不经常用的,然后使用工具把这个账户提升到管理员权限,从表面上看来这个账户还是和原来一样,但是这个克隆的账户却是系统中最大的安全隐患。恶意的攻击者可以通过这个账户任意地控制你的计算机。为了避免这种情况,可以用很简单的方法对账户进行检测。

    首先在命令行下输入net user,查看计算机上有些什么用户,然后再使用“net user+用户名”查看这个用户是属于什么权限的,一般除了Administrator是administrators组的,其他都不是!如果你发现一个系统内置的用户是属于administrators组的,那几乎肯定你被入侵了,而且别人在你的计算机上克隆了账户。快使用“net user 用户名/del”来删掉这个用户吧!

    转自:http://netsecurity.51cto.com/art/200912/167520.htm

Open Toolbar