摘要:随着网络数据库的应用日益广泛,基于信息技术的各种业务系统应用也变得越来越复杂,需要被存储及查询的数据也越来越多,并因此形成了大量的历史业务数据。本文对数据库设计结构优化和数据库语句优化等方面对数据库进行优化。
关键词:数据库优化;运行效率
随着控制理论及电子和计算机技术的高速发展,为适应科研和生产中的需求,在检测技术领域出现了许多新的理论、技术和概念,虚拟仪器也由此而生。虚拟仪器的概念提出后,自动化测试系统的软件设计在整个系统中就显得更为重要。在硬件通用测试平台的基础上,系统的人机界面、测试功能与系统扩展都需要软件来实现。在传统测试软件编制过程中,主要以测试流程为依据,由上至下逐步完成,所有的输入参数、测试标准等都内置于测试软件中。任何参数的改动以及测试系统的扩展,都需要重新编译程序,大大增加了软件的开发时间,降低了系统的可靠性。
一、MySQL数据库
MySQL数据库是以“C/S”模式实现的,开放源码的关系型数据库,该数据库因其适应性、迅速性、可靠性、管理方便以及跨平台等特性,成为备受关注的开源数据库之一。虽然MySQL数据库具有良好的运行效率,但是随着网络数据库应用的发展,如何提升MySQL数据库的运行效率是如今面临的更大的难题。自动测试系统的大容量数据存储需要借助优秀的数据库平台,完成数据的安全、完整和快速存储,方便灵活的查询。而MysQL数据库无疑是一个很好的选择,它是多线程、多用户的关系型数据库,具有以下特性:存储方面,每个表可以处理多达50 000 000个记录;写入数据所用时间只有SQLServcr、Access的1%或更少;优化的SQL查询算法,有效地提高查询速度;完善的权限设置机制,保证数据的安全;提供TCP/IP、ODBC和JDBc等多种数据库连接途径;提供用于管理、检查、优化数据库操作的管理工具。另外MySQL占用磁盘空间很小,只有100多兆,安装、启动执行也很方便。
二、影响数据库系统性能的因素
1.磁盘IO。在多进程或多线程并发读取磁盘或服务器可用内存小于热数据情况下,随着并发数的增加,磁盘IO效率会大大下降。
2.数据库连接数。并发请求数是数据库服务器同时处理的请求数,连接数通常大于并发数。现在,系统中的每个前端服务器(如nginxapache Tomcat)都将建立与数据库的多个连接。大多数其他链接处于睡眠状态,但可以为数据库建立的数据库连接数量有限制。在MySQLmax_connection参数是控制的默认是100。
3.大表带来的问题。大表会造成慢查询,使查询出所需数据的时间变得更长,
DDL操作也会受到大表的影响,会导致建立索引的时间变得很长。
4.大事物带来的问题。运行时间和操作数据都远高于其他事物的事物,就是大事物。对于innodb事务存储引擎而言,由于过多的锁定数据导致阻塞和锁定超时,大事物对数据库性能的影响,虽然使用了行级锁,但在这个问题上,为了确保事物的一致性,所有相关的应用程序都将被锁定。如果slave的sql线程不能承受生成的DDL的数量,会把所有的记录全锁住,会产生阻塞,回滚所需的执行时间太长,导致主从延迟。
三、基于数据库设计的优化技术
在数据库设计上,有很多细节值得注意。首先,当数据表中某个字段为Enum类型时,尽量不要使用Varchar类型,一般使用Tinyint类型,比如日常所使用的性别字段(男、女)、学院、班级等的编号都可以采取这种方式。在字段设计过程中,尽量少用null值,可以采取默认结果为empty或者0,因为null需要更多的额外空间,在进行比较时,还需要进行转化,程序将会显得更为复杂。日期字段一般采取TimeStamp,用整型来标记,这样在格式转化时会很方便,IP地址一般采用整型来存放,这样可以方便做比较。
在数据库表设计的过程中,表的字段能采取固定长度的一般都必须设置成固定长度,如果一张表中没有varChar、Text和Blob类型字段,该表称为“固定长度静态表”,因为查询固定长度静态表的引擎会比普通表宽很多,如果字段不是定长,每次找下一条记录时,必须找到数据表下一条主键的入口。但该种类型的表有一个缺陷,就是浪费空间。此时不妨在数据库设计时采取垂直分割技术,可以把表分割成为两个,一个是定长的,一个则是不定长的。垂直分割其实就是对表中字段进行正向投影,根据具体需求和操作的业务逻辑把一张表中的字段变成几张表,这样可以降低表的复杂度和减少传输数据量,从而达到优化的目的。假设用户表tbl_user(包括用户ID、用户姓名、用户密码、用户昵称、用户电话号码、用户性别、用户常用地址等),在这样一张表中,可以把它拆分成两张表,一张用于注册服务和登录服务的用户登录信息表(包括用户ID、用户姓名、用户密码),另一张为用户基本信息表(包括用户ID、用户昵称、用户电话号码、用户常用地址等)。这样分出去的表只要不经常进行连接操作就可以,否则也会降低数据的查询效率。在数据库表的操作上,如何避免因为锁表问题而出现宕机尤为重要,因为在同一个系统中执行一个大的写操作(delete、update和insert)时,一定要注意尽量细化写操作,因为在服务器程序中,如果有太多子进程、线程和数据库连接,这样会导致服务资源被大量占用,假如有一个表因为这些问题被锁上20秒钟,对于一个访问量大的平台,就有可能让平台崩溃,甚至于宕机。假设需要批量删除或者增加,最好的办法就是做几条,就休息一段时间,这样就会大大降低锁表问题出现的概率。在数据库引擎上也要做出正确的选择,myisam和innidb各有自己的特点,myisam适合查询量较大的应用,对于写操作支持不足,而innodb相对比较复杂,对于写操作比较频繁的操作,它有自己的优势,比如支持行锁、事务等。
四、性能优化方法
多线程引擎效率优化。在今天的MySQL数据库开发中,业务应用层直接调用数据库连接和更新等。API函数非常常见。而结合实现底层MySQL数据库操作透明化的思想、通过动态链接库的办法实现代码等资源的共享,这使得实现应用程序业务逻辑和程序设计管理变得容易。
1.分层架构设计。业务应用层、数据库连接池、数据库缓存层、数据库驱动层等构成了分层架构设计。
2.数据库连接池。大量数据频繁的操作请求数据库,数据库连接无法满足,此时使用多线程技术是极其重要的,这使得数据库性能大大提高。能够在请求数据库连接时为该线程在空闲区中查找空闲连接进行分配。该逻辑通常陷入多线程的困境,试图确保连接资源数据的一致性,并争夺同一连接资源,从而导致数据库中同一记录的响应速度慢,更新顺序混乱。还可以改进DAT。连接池性能可以通过应用tbb线程在模块库中构建当前的队列容器提升。
3.数据库缓存层。缓存数据让Client尽可能少的访问数据库服务器进行数据的查询是数据库缓存层的主要功能,因为会有多条查询记录被缓存在结果集中,因此该层必须做好缓存处理和查询结果,处理对象包括数据表、数据记录、索引,包括数据采集类都是由mult组成的。iple irecord对象,通过查询返回这个数据库缓存层的结果,由字段的分数和数据记录的数目组成。特定保存应考虑MySQL、C++、Java数据类型转换。
4.数据库驱动层。MySQL数据库最底层的数据库驱动层,负责的是MySQL的连接。上面提到的所有MySQL数据库操作都需要它的支持,它只需要灵活调用GetErrorMsg()和Connect()等接口,更好地服务于应用程序的错误检查解决方案,同时保证它们自己功能的完成。
本文介绍了MySQL数据库优化技术,可以数据库设计结构优化和数据库语句优化等方面对数据库进行优化,提高MySQL数据库运行效率。
参考文献:
[1]吴逸.基于MySQL数据库的优化[J].电子科技,2018(9):182-184.
[2]李建.基于MySQL的数据库系统并发控制及自优化研究[D].成都:成都理工大学,2018.
[3]陆宏.一种高效内存数据库设计[J].指挥信息系统与技术, 2012(1):81-84.
[4]张连喜.指挥信息系统数据库异地数据互操作设计[J]. 指挥信息系统与技术, 2012(2):63-66.