U8系统性能调优及注意事项
- 格式:doc
- 大小:122.00 KB
- 文档页数:7
用友U8性能调优及开发注意事项
U8系统为多层部署,以数据为中心的企业业务处理系统。
影响和决定系统运行效率主要有以下几个方面,服务器硬件配置;系统部署状态、网络等系统配置。
软件环境,程序算法,代码编写、尤其是数据库代码的编写。
下面将对这几个方面展开。
一、服务器硬件配置优化
U8系统首先是运行在服务器硬件基础上,所以硬件配置和调整对系统影响很大。
同时决定服务器性能的主要是磁盘、内存、处理器三方面。
1.磁盘IO方面
使用U8系统建议配置磁盘阵列,推荐至少4张10K转/分的硬盘以上制作Raid,保证Raid 的磁盘读取速度在200MB/S以上。
日常情况下系统磁盘排队明显,磁盘排队经常在10以上,请考虑增加Raid中硬盘数量,或考虑增加磁盘阵列柜,以缓解磁盘IO的吞吐压力。
2.内存方面
使用U8系统中等规模以上时,数据库服务器保证4GB内存以上。
如果应用服务器和数据库服务器安装在同一台服务器上,服务器内存不能低于4GB。
日常情况下系统内存页交换明显,如果服务器内存页交换经常在30 Pages/Sec以上,请考虑增加服务器内存。
3.处理器方面
用户数据量大,系统磁盘操作较多,数据库服务器压力,主要是处理器压力。
处理器使用率一般情况下不超过60%。
如果CPU占用率长时间超过75%以上,推荐增加服务器处理器个数,或使用多台数据库或应用服务器以减轻系统应用服务器压力。
4.网络要求
局域网内使用U8系统,应保证网络畅通,客户机与服务器的通讯正常。
使用Ping命令从客户机向服务器发送请求,
正常反馈为:Reply from 10.1.43.36: bytes=32 time<1ms TTL=126。
如果响应时间超过1ms(Time>1ms)应调整网络设置,确保通讯。
5.数据库服务器内存分配调优
●在32位 Microsoft Windows 2003 操作系统中选项的具体配置方式如下:
/3GB
修改系统的Boot.ini文件。
Boot.ini文件在系统根目录下,缺省是隐藏的,需要打开响应的浏览选项才能看见。
安如下方式修改系统启动配置:
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows Server 2003, Enterprise" /3GB 注:如果操作系统 Windows 2003 已经安装SP2,系统应该自动开启了PAE,观察应用程序和SQL Server内存是否可以使用超过2GB,如果可以就不用打开/3GB。
/PAE
PAE模式也是通过Boot.ini文件来配置,例如:
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows Server 2003, Enterprise" /PAE
●在32位 Microsoft Windows 2008 以上操作系统中选项的具体配置方式如下:
/3GB
在Windows命令行中输入:BCDEDIT /SET INCREASEUSERVA 3072
/PAE
在Windows命令行中输入:BCDEDIT /SET PAE ForceEnable
●数据库大内存配置:
AWE 通过SQL Server Query Analyzer 来配置,在查询分析器中运行以下语句:EXEC SP_CONFIGURE'AWE ENABLED', 1
RECONFIGURE
AWE 通过 Microsoft SQL Server 2005 或 Microsoft SQL Server 2008 企业管理器来配置(SQL Server 2000 和 2005的数据库都可用 Microsoft SQL Server 2008 企业管理器来进行配置),右键选中SQL Server 实例如下图所示,选中红圈处即可:
注:64位服务器不用配置Microsoft Windows, SQL Server 不需要配置AWE选项。
移动SQL Server 数据库临时库TempDB
数据库制作磁盘阵列,但安装SQL Server数据库时 TempDB 库没有放在磁盘阵列上,为了提高效率和性能此时需要把 TempDB 也放在磁盘整列所在的磁盘上,以下是移动 TempDB 的 SQL 命令:ALTER DATABASE tempdb
MODIFY FILE
(
NAME= tempdev,
FILENAME='要转移的数据库目录+ \tempdb.mdf',-- 如:'E:\Disk_Database_TempDB\tempdb.mdf', SIZE= 3000MB,
FILEGROWTH= 50MB
)
ALTER DATABASE tempdb
MODIFY FILE
(
NAME= templog,
FILENAME='要转移的数据库目录+ \templog.ldf',-- 如:'E:\Disk_Database_TempDB\templog.ldf', SIZE= 1000MB,
FILEGROWTH= 500MB
)
二、数据库SQL语言注意事项
1.触发器规范
由于数据表触发器容易产生很多数据库问题,一般情况下禁止使用触发器。
请使用系统API的前后事件进行代码编程。
2.视图规范
●禁止在视图基础上创建视图,视图不能产生视图;
●禁止通过视图修改数据;
●禁止修改系统视图;
●视图中不要有ORDER BY 排序语句;
●视图中不要使用UNION联合视图;
●禁止使用“Select * from ……”,“Select T.* ……”等语句;
●尽量在视图中不使用子查询。
3.存储过程规范
●编写存储过程原则
✧将每个存储过程完成一项单独的任务;
✧存储过程可以调用存储过程;
✧存储过程中禁止使用全局性质的临时表;
4.自定义函数规范
●自定义函数的代码与注释书写规范类似于存储过程;
●自定义函数应看作除了SQL语句外最小执行单位;
●自定义函数中不能调用存储过程;
●自定义函数中只能对表进行操作,不允许对视图进行操作;
●自定义函数尽量不要用到条件列、查询列中,因为要进行全表数据计算,影响查询性
能,可以用于查询条件中,尽量用于查询条件右侧,使用固定值。
5.索引规范
●创建索引原则:
在经常作为条件搜索的列上创建索引;
保持索引中的数据量尽可能的少。
在关键、经常使用的外键上创建索引;
检索方式比较复杂时,应考虑创建复合索引,SQL 2005以上可以创建包含性索引。
6.程序SQL语句规范
●尽量不适用子查询,尤其不能在排序、查询字段中使用子查询。
子查询的层次不应超
过2层。
●小心使用 IN 和 OR,需要注意IN集合中的数据量,建议集合中的数据不超过300个;
●应避免在ORDER BY子句中使用表达式;
●考虑到执行速度,代码维护,代码的不可控等因素,数据库升级的兼容性等很多方面,
一般情况下禁止使用“Select * from ……”,要明确查询的字段;
●在WHERE 子句中,避免对列的四则运算,特别是WHERE条件的左边,避免使用运
算与函数对列进行处理。
比如有些地方substring 可以用like代替;
●请小心不要在过多的列上使用列函数和ORDER BY,GROUP BY 等,
●谨慎使用DISTINCT;
●尽量用union all 代替union,数据库执行union操作。
数据库首先执行union两端的查询,将其放在临时表中,然后在对其进行排序,过滤重复的记录,当已知的业务逻辑决定query A和query B中不会有重复记录时,应该用union all代替union,以提高查询效率;
●对一个业务过程的处理,应该使事务的开始与结束之间的时间间隔越短越好,原则上
做到数据库的读操作在前面完成,数据库写操作在后面完成,避免交叉。
保证事务中写操作使用的数据表和数据按指定的一致顺序,避免死锁。
●在一个事务中,对同一个表的多个insert语句应该集中在一起执行;
●在一个业务过程中,读取域写入操作尽量分开集中按批量执行,以减少死锁的可能性;
●避免使用游标。
●可以不加锁的读操作,尽量使用不加锁读。
注:以上SQL语句规范同样适合视图,存储过程,自定义函数的编写。