1、数据库索引创建检查。包括:(a)索引字段应为差异性较大、长度较小的类型,枚举类型字段不要建索引;(b)防止创建包含过多字段的复合索引;(c)索引字段的值不要出现过多空值或重复值。
2、数据库索引使用检查。包括:(a)对表的数据操作(尤其是对大表的查询)是否用到了合适的索引;(b)对于插入型的实时表,保证新记录插入到索引顺序的最后面;(c)如果有复合索引,要按建立索引字段的顺序(取前面部分或全部字段)做查询。
3、代码SQL按需读写检查。仅返回需要的数据,减少磁盘及网络IO。例如:大表访问中不要用 select * ,要指定具体的字段,返回结果集时要加上合适的 where 限定条件,减小返回结果集的大小。
4、表映射类检查。包括:(a)对表映射类的公共方法,必须抽象出公共基类和相关接口,便于日后对公共方法和辅助方法的添加和修订;(b)对表映射类中的数据字段的Get和Set方法,必须匹配该值与其对应的数据表字段值的对应关系,如:字段值是否为NULL;字段值是否为空字符;(c)将表映射类对象转换为XML字符串的方法,或将结果集转化为表映射类对象的方法,需要区分字段值是否被初始化,是否为NULL值或空字符,反之亦然(例如:数据库中,Integer类型数值可能为NULL,VARCHAR类型数据值可能为NULL或””)。
5、关键模块禁止使用自动代码。使用自动代码必须注意的问题包括:(a)不要使用自动代码进行批量查询(查询字段、查询条件必须手工编写);(b)不要使用自动代码进行事务处理和批处理;(c)原则上自动代码仅允许提供明确按主键定位的方法;(d)原则上仅允许在非关键的信息维护表的处理中使用自动代码(例如:客户信息的维护模块,数据表字段多,业务处理代码简单,与数据表字段一一对应)。
6、连接表查询优化检查。包括:(a)连接表数量不宜超过2个;(b)子查询结果较小的表应作为连接查询主表;(c)超过两个的连接查询,若数据量巨大,不宜使用SQL或存储过程直接查询,可通过业务处理代码实现子查询结果的合并;
7、批处理SQL操作优化检查。包括:(a)对于批量的重复性的数据表操作,考虑首先查询出批量SQL所需使用的结果集,然后使用AddBatch()添加操作SQL,最后ExecuteBatch();
例如:(Select 1条记录 + Insert 1条记录)*100次,应优化为:Select 100条记录 + AddBatch(Insert 1条记录) *100+ExecuteBatch();(b)对于批量数据转移操作,如当前表转历史表,考虑使用Insert into …Select from …来实现。
8、潜在超大事务检查。包括:(a)优化事务中的操作,尽量避免大事务的产生;(b)把大事务拆分成若干小事务分别处理;(c)尽量使用共享锁,注意及时提交事务,释放锁和事务日志;(d)设置数据库配置参数,当事务执行时间超过阀值时,自动回滚事务并释放锁定的资源,同时注意察看数据库系统日志中相关事件记录。
9、数据库死锁检查。减小死锁发生机率,包括:(a)用共享锁代替排它锁;(b)减小锁的粒度;(c)不同进程按同样的顺序申请资源。
10、分布事务处理检查。若业务处理的控制相对简单,则无需引入事务管理器等复杂的解决方案,可考虑采用经典的提交确认方法来解决:(a)插入一条分布式事务记录,“提交状态”为“未确定”);(b)提交子事务1;(c)提交子事务2;(d)修改“提交状态”为“已确定”。
对于提交失败的分布式事务,由逻辑代码自行判断执行回滚or重新提交;
11、日志完整性检查。包括:(a)日志应根据阅读者的不同分类,如:给业务管理人员用的用户操作日志,给系统管理员看的系统操作日志,给开发人员看的系统异常日志,等等 (b)日志的内容应比较完善能反映问题,如:时间,用户ID,系统模块ID,日志描述,错误编码,错误级别,错误描述;(c)日志的载体可分为文本日志、数据库日志,对数据库可能异常的地方应同时记录文件日志;
12、非法全局性实例变量检查。在数据库操作的代码中应:(a) 非特别需要,避免使用全局变量;(b)避免通过全局变量传递参数;(c)避免将局部变量设为全局变量;
13、静态变量检查。在数据库操作的代码中应:(a)非特别需要,避免使用过多的静态变量;(b)避免静态变量与线程并发处理相关;(c)避免公开静态变量供外部使用;
14、超大内存对象检查。包括:(a)对于大内存对象的运算程序,应该控制其线程并发数;(2)测试在最大并发量下的进程内存占用情况;(c)大内存对象可考虑存储于BLOB或CLOB字段中,存储前考虑对其进行压缩运算;(d)存储大内存对象的数据表应独立建表,将其作为相关业务数据表的子表;
15、资源未释放检查。跟踪每一处资源创建的语句,保证其都有对应的资源释放语句,防止遗漏。
16、报表及统计类程序与实时处理程序分离检查。包括:(a)对于每日、每周、每月、每季度、每半年、每年固定所需的统计报表,可制定批处理执行计划,在非繁忙时段(如凌晨)进行报表运算;(b)对于临时提交的查询报表请求,避免对其进行实时运算,可将该任务提交给批处理任务管理模块,由程序根据其优先级和等待时间等在空闲时间进行,完成批处理任务后向相关人员发送通知;(c)不允许由业务操作人员随时发起报表及统计操作,更不允许由业务操作人员随意设置查询条件进行查询、统计,而是应由程序事先做好报表及统计功能,由业务操作人员触发或在空闲时间在后台统计并生成结果文件,业务操作人员只能随时调阅生成的结果文件。
分享到:
相关推荐
chromedriver-linux64-V124.0.6367.91稳定版
在官方的基础上改了检测头、导出onnx(适配tensorrt pro 项目)、测试demo等代码。 能够使用清华V2X数据集进行训练和测试。 https://www.bilibili.com/video/BV1Wd4y1G78M/?vd_source=0223c707743ff3013adaeff54aee3506 数据集来源:https://thudair.baai.ac.cn/index 基于Yolov7 tiny,加入了距离回归 模型没收敛完,随便试了下,所以预测有抖动 使用TRT加速,在AGX Xavier上推理大约4ms V2X使用tools/convertlabel2yolo.ipynb 进行数据集转换
基于STM32F101单片机设计Bluetooth Sentinel 主板硬件(原理图+PCB)工程文件,仅供学习设计参考。
【前端热门框架【vue框架】】——条件渲染和列表渲染的学习的秒杀方式 (2)
liba2ps1-4.14-bp155.4.9.aarch64
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
基于嵌入式
基于matlab实现关于语音信号声源定位DOA估计所用的一些传统算法.rar
sdk.config
海康威视DS-K1T342M人脸识别门禁机升级固件
2024-2030全球与中国太阳能发电机市场现状及未来发展趋势
毕业设计:基于springboot的中小企业财务管理系统(源码 + 数据库 + 说明文档) 2 开发技术简介 6 2.1 基于B/S结构开发 6 2.2 jsp语言简介 6 2.3MYSQL简介 6 2.4 eclipse工具 7 3 需求分析 7 3.1 可行性分析 7 3.1.1 经济可行性 7 3.1.2 技术可行性 7 3.1.3 操作可行性 7 3.2 功能需求分析 8 3.3 非功能需求分析 8 4 系统设计 9 4.1 数据库设计 9 4.2 系统模块总体设计 10 5 系统详细设计 10 5.1 后台登录页面 10 5.2 管理员信息 11 5.3 财务人员信息 11 5.4 资产负债 12 5.5 税收管理 12 6 系统测试 13 6.1 测试的目的 13 6.2 测试的方法 13 6.3 测试的重要性 14 6.4 测试内容 14 6.5 测试结果 14
python tkinter-08-盒子模型.ev4.rar
HAL 驱动库和 LL 驱动库函数说明 介绍各个函数的使用方法 包含HAL库和LL库 这个官网是PDF格式的 体积巨大 这个 WORD 格式的体积小巧 介绍 HAL 驱动库已经实现了适用于 PY32F0xx 系列芯片的一整套 APIs,这些 APIs 能够使应用程序与底层硬 件之间的交互更加简单、方便。 在 HAL 驱动库中用户能够调用的 APIs 可以分为两类:通用 APIs 和扩展 APIs。通用 APIs 为所有 PY32F0xx 系列芯片提供通用功能的驱动。扩展 APIs 则根据不同型号提供扩展功能的 APIs。 HAL 驱动库并不是基于 IP 所构建的,而是基于外设的特性和功能实现的。例如,USART 拥有 UART 和 USART 两种功能,每种功能都拥有一组独立的驱动程序来支持,并且它们的驱动程序是相互分离的。 HAL 驱动库函数的入口处均有断言函数,断言函数用来校验输入参数是否合法。这种校验方式提高了驱 动程序的健壮性。用户也可以使用断言函数来进行编写和调试应用程序。 HAL 驱动库提供的 APIs 均具有很高的可移植性,并且它们对用户屏蔽了 MCU 和底层硬
2024年全球电大提琴行业总体规模、主要企业国内外市场占有率及排名
Bug Bounty Tip - i春秋Self-XSS变废为宝的奇思妙想 i春秋技术分享,将self-xss利用扩大化,奇思妙想可以借鉴。
基于matlab实现基于复杂网络的囚徒困境博弈matlab源程序,基于方形格子或无标度网络。.rar
SOT23;P—Channel沟道,-30V;-5.6A;RDS(ON)=47mΩ@VGS=10V,VGS=20V;Vth=-1V;
三相半波可控整流电路是一种将三相交流电转换为直流电的电路,其原理是利用三相交流电源产生的三个交流电信号,经过一系列电子元件的控制和变换,将交流电转换为直流电输出。在整流过程中,通过控制晶闸管的导通和关断来实现整流。 在三相半波整流电路中,首先将三相交流电源的三个相电压分别经过三个二极管进行整流,实现三相交流电转换为半波直流电信号。然后,通过一个滤波电容器对半波直流电进行滤波,消除整流后的脉动成分,得到平稳的直流输出电压。与单相半波电路和单相全波电路相比,三相半波可控整流电路具有一些明显的优点: 输出电压波动小:由于三相电源的输出具有周期性,整流后输出的电流具有连续性,因此输出电压的波动较小。整流效率高:三相半波整流电路可以对三相信号进行整流,同时避免了负载端电流的波动,因此整流效率更高。
如何在 Ubuntu 16.04 上使用 Node-RED 连接你的物联网设备