数据库优化

152 阅读1分钟

前言

生产上数据库优化是非常有必要的,优化后能快速提升用户体验、保障系统稳定性、降低成本。

关注点

  1. 数据库调优的目标是什么?
  2. 如果进行调优有哪些维度可以进行选择?
  3. 如何思考和分析数据库调优这件事?

调优目标

使得数据库运行更快,响应时间更短,吞吐量更大。

调优目标应当是变化的不能单纯的从更快来进行定义,例如在双十一会带来大规模的并发访问问题。

如何确定调优目标?

  • 用户反馈
  • 日志分析
  • 服务器资源使用监控
  • 数据库内部状况监控

调优维度(优化手段)

1、选择适合的DBMS

  mysql、mongodb、hbase。

2、优化表设计

  第三范式、反范式设计、选择合适的数据类型。

3、优化逻辑查询

   sql语句使用优化。

4、优化物理查询

    建立索引。

5、使用redis缓存

6、库级优化

   主从架构、读写分离、垂直切分、水平切分。

7、写优化

以mongodb为例:

7-1连接数 maxPoolSize 调优;

import mongoose from 'mongoose';

const dbAddress = `mongodb://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST}/
    ${DB_DATABASE}?replicaSet=${replicaSet}&authSource=admin`;

mongoose.connect(
            "",
            {
                // @ts-ignore
                useNewUrlParser: true,
                useUnifiedTopology: true,
                maxPoolSize: 50
            },
            function(err) {
                if (err) {
                    console.log(err, 'mongodb连接失败。')
                    reject(err)
                } else {
                    console.log('mongodb连接成功。')
                    resolve(true)
                }
            }
        )

7-2单个写入改为批量写入;

import mongoose from 'mongoose';

const studentSchema = new mongoose.Schema(
    {
        dataId: mongoose.SchemaTypes.ObjectId,
        name: String,
        age: String
    },
    { strict: false });

const studentModel = mongoose.model('student', studentSchema);

const data = [{'name': 'jack', 'age': '16'}];
const options = {};
studentModel.insertMany(data, options);

7-3写入参数调优。

import mongoose from 'mongoose';

const data = [{'name': 'jack', 'age': '16'}];
// 不排序、不校验
const options = {ordered: false, lean: true, bypass_document_validation: true};
studentModel.insertMany(data, options);

参考:

SQL性能优化大全

SQL性能优化的21个小技巧

sql优化的15个小技巧