灵魂腐蚀 发表于 2015-1-16 22:28:54

MSSQL网页编程之深切SQL SERVER 2000的内存办理机制(一...

也就是说在php本地调用pdoprepare中的mysql_real_escape_string来操作query,使用的是本地单字节字符集,即编码为xbfx5cx27,并带入到mysql中查询,由于使用setnames设置了连接字符集.server
深切SQLSERVER2000的内存办理机制





http://msdn.microsoft.com/data/default.aspx?pull=/library/en-us/dnsqldev/html/sqldev_01262004.asp



KenHenderson

MicrosoftCorporation

备注:KenHenderson从开辟者的角度来论述了SQLSERVER2000内存办理的外部机制



简介

在本专栏中,我们将从一个开辟者的角度来探究SQLSERVER的内存办理。因而我们将会商服务器内存办理的API和操纵体系的内存办理机制,他们是怎样运转的?以这类新奇的体例来切磋SQLSERVER内存办理,可使开辟职员分明个中的来龙去脉,精晓一个产物,我们要懂得它外部是怎样运转和特定的用处。

我们起首入手下手的研讨,它包含一些Windows内存办理的基础道理。和一切的32位的Windows程序一样,SQLSERVER也是利用Windows的内存办理机制来分派、开释和通用的内存办理资本。也就是说,SQLSERVER和其他Windows程序一样经由过程WIN32API函数和操纵体系供应的内存办理资本交互。

由于几近一切的SQLSERVER内存分派都是利用假造内存(而不是堆的体例),年夜部分的内存分派的代码分化到最初都是调有Win32的VirtualAllo和VirtualFreeAPI函数。SQLSERVER经由过程挪用VirtualAllo函数来预留和提交假造内存,经由过程VirtualFree函数来开释内存。



假造内存和物理内存

在X86处置器的系列中,Windows供应一切的程序能够寻址4GB假造内存空间。所谓“假造”的意义是,这并非传统意义上的内存,它仅仅是一段没有物理存储的隐式地点段。由于只要一个程序入手下手内存分派,才入手下手利用这些地点段和物理的分派存储空间。并且,这些物理的存储空间其实不必要物理的内存(不完整),一般是磁盘空间。明白的说应当是在体系的假造页文件中。这就是为何有很多程序(每一个程序有4GB的假造内存空间)能够同时运转在只要128M的物理内存的呆板上,就像每一个程序本人分派实在的内存一样。Windows通明地把持从体系页文件拷贝和读取数据,因而程序能够在运转的呆板上分派比物理内存更多的内存空间而且各类程序能够均等的会见该呆板物理内存。

4GB的内存地点空间分为2块:用户内存空间和中心内存空间。默许每一个容量为2G,你能够经由过程WindowsNT系列操纵体系的BOOT.INI文件来改动默许空间的巨细(好比:WindowsNT,Windows2000,WindowsXP和WindowsServer2003都是WindowsNT系列的产物,Windows9x和WindowsME不是的)。



Figure1.Windowspartitionsaprocesssvirtualaddressspaceintotheusermode(application)andkernelmode(operatingsystem)partitions.



只管每个程序承受本人的假造内存空间,体系代码和设备驱动代码共享一个独自公有的假造地点空间。每一个假造内存页都和一种特别处置器形式联系关系。为了满意一切的体系页都能够被会见,处置器必需是哀求形式。这个意义是说用户的程序是没法间接会见中心内存空间,体系必需切换为中心形式,如许中心形式的内存空间才能够被会见。



程序内存空间调剂

在BOOT.INI文件中有一个/3GB的参数能够同意改动默许的限定(这个参数在Windowsadvancedserver和Windows2000DataCenter无效),如许能够经由过程就义中心内存空间(从2G下降到1G)将用户使用程序的内存空间从2G增添到3G.在Windows的用法中,这类机制叫程序内存空间调剂或叫4GT调剂(4GT).你能够经由过程在BOOT.INI文件的地区的得当的行加/3GB参数来调剂使用程序的内存空间.对一样平常的人来讲能够选择设置BOOT.INI文件的地区的得当的行增添/3GB或不加/3GB参数来启动体系.

告诫:你也能够在Windows2000Professional和Windows2000的启动文件中加/3GB的参数来启动体系,但是如许只是削减了中心内存空间到1GB但并没有增添使用程序内存空间.换句话说,如许做并没有从下降中心内存空间取得好处
正文:在WindowsXP和WindowsServer2003中供应一个新的启动参数/USERVA,能够和/3GB参数一样利用,但同意你有加倍杰出的把持度.你能够象/3GB一样将/USERVA参数到BOOT.INI文件中./USERVA参数比/3GB的上风在于,它能够同意你指定内存地点空间分派给使用程序的巨细.好比:/USERVA=2500的意义就是设置2.5G的内存地点空间预留给用户内存空间,1.5G的留给中心内存空间.出格申明/3GB参数仍是能够独自利用的.修复过程包含最多4个阶段,在下面描述。在你开始前,你应该cd到数据库目录和检查表文件的权限,确保他们可被运行mysqld的Unix用户读取(和你,因为你需要存取你正在检查的文件)。如果它拒绝你修改文件,他们也必须是可被你写入的。

乐观 发表于 2015-1-19 14:22:14

如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。

变相怪杰 发表于 2015-1-25 21:49:19

数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。

小女巫 发表于 2015-2-4 06:12:07

大家注意一点。如下面的例子:

金色的骷髅 发表于 2015-2-9 17:19:29

SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。

莫相离 发表于 2015-2-27 12:39:29

不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理?

小魔女 发表于 2015-3-9 03:53:36

我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力

若天明 发表于 2015-3-16 20:26:41

Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。

山那边是海 发表于 2015-3-23 00:53:59

换言之,只有在不断的失败中尝试成功,而关于失败的总结却是很少的
页: [1]
查看完整版本: MSSQL网页编程之深切SQL SERVER 2000的内存办理机制(一...