zoukankan      html  css  js  c++  java
  • 8.1.概述

    主要是影响性能的因素

    数据库性能在依赖以下几个数据库级别因素,比如,数据表,查询,配置。这些软件层的构造造成你必须尽可能的减少硬件层CPU和IO操作.
    当你处理数据性能时,你首先学习软件层上高级别的规则和手册,使用时间来测量性能,当熟练后,你开始学习更多内在发生的事情,开始测量CPU时间片和IO操作.

    1.数据库级别的优化

            让数据库程序运行更快的几个重要因素.

    1.数据表结构是否合适.

         通常,让列有正确的数据类型,是否每个数据表的列是否对当前环境合适?比如,
         对于经常执行更新的应用程序通常有更多的表,但是每个表的列较少,对于经常分析大量数据的应用程序,
         经常有比较少的数据表,但是数据表有很多的列。

    2.是否有设置了正确的索引让查询更高效.

    3.对每个表是否使用了合适存储引擎

       对于每个存储的优点和特色你是否有使用? 通常,选择有事务能力的存储引擎(比如InnoDB) 或者
       选择没有事务能力的存储引擎(比如MyISAM)是影响伸缩和性能的一个重要因素.

                注意: 在MySQL5.5和更高版本中,对于新建的数据表InnoDB是默认的存储引擎.

                实践中,InnoDB良好的性能特色意味着它通常能比MyISAM 做的更好,特别是在一个繁忙的数据库中.

    4.每个数据表是否都使用了合适的行格式?

         这个选择依赖于数据表所使用的存储引擎.通常,压缩表(compressed tables)格式使用更少的
         磁盘空间,并且读取数据使用更少的磁盘IO,InnoDB数据表使用压缩格式适合于各种各样的负载.

         对于只读的MyISAM数据表同样合适.

    5.应用程序是否使用了合适的锁策略?

       比如,使用共享的方式能够让数据库操作同时进行,使用排他的方式能够让冲突操作得到最先优先级.
       再次声明,存储引擎的选择非常重要。InnoDB存储能够在你不许参与的前提下解决许多锁的问题,

       能够让数据库有更大的并发性以此来减少你调整代码的次数和测量的次数。

    6.缓存使用的内存大小是否设置正确?

      也就是,内存大小是否大到足够缓存所有需要的数据,如果不太大会造成物理内存负载过高并造成页面调度.
      主要配置的内存区域包括,InnoDB buffer pool,MyISAM key cache,MySQL query cache(数据库查询缓存).


    2.硬件级别的优化

       随着数据库越来越繁忙,数据库最终会受到硬件的限制,DBA必须评估是否可以对程序进行调优,重新配置服务器或者给更多硬件资源
      ,以此来避免硬件瓶颈,系统瓶颈有以下几个方面:

    1.磁盘寻道,

       磁盘寻道主要是磁盘寻找数据块的时间,当前磁盘一次寻道时间通常小于10ms,所以在我们理论上1s可以做100次磁盘寻道.
       对于新的磁盘这个时间上升的很慢,但是对于单个数据表的优化十分重要.优化磁盘寻道时间的方法是把数据分散到多个磁盘上(并行读取数据).

    2.磁盘读取和写入.

       当磁盘旋转到合适位置的时候,我们需要读取或者写入数据.当代磁盘磁盘传输数据的速度是10-20MB/s,比起寻道时间.这个
       更容易优化,因为你可以在多个磁盘上进行并行读取.

    3.CPU时间片,

       .当数据在主内存时,我们必须对数据进行处理以此来寻找到我们需要的结果.使用大内存装载大数据表,CPU时间片是主要因素.
       但是对于小数据表,CPU速度通常没那么重要.

    4.内存带宽.

        当CPU需要更多的数据来填满CPU cache时,主内存带宽变成瓶颈.对于许多系统来说这个瓶颈并不常见.但是也应该意识到这个因素.

    3.在可移植性和性能之间平衡

        在可移植的MySQL应用中使用面向性能的SQL扩展,你可以在语句注释中(/*! */)包含MySQL特定的关键字.其他SQL服务器忽略注释关键字.
        更多关于注释的信息,查看 Section 9.6, "Comment Syntax"

  • 相关阅读:
    SQLServer2008设置开启远程连接
    C# 调用 SQL server 初探
    在同一网关下ping不通其他电脑
    SQL server 2008 安装报错 reporting services catalog database file existence
    Sql Server中一次更新多列数据
    Git warning push.default is unset
    删除右键菜单中的Git
    Java多线程中Lock的使用
    ConcurrentHashMap如何保证线程安全
    Java多线程之ThreadLocal
  • 原文地址:https://www.cnblogs.com/shuiyonglewodezzzzz/p/9833882.html
Copyright © 2011-2022 走看看