1 数据库连接数,根据需要增加
datasource:
dynamic:
druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)
initial-size: 100
max-active: 100
min-idle: 100
max-wait: 100
2 数据库会超过十万条数据的表,一定要加索引,有经常用来筛选的字段都要加,比如用户id,时间
3 多数据源直接在yml里面添加,不要用数据库添加,用数据库添加无法更改连接数
datasource:
master:
username: AAA
password: AAAAA
url: jdbc:mysql://127.0.0.1:3306/AAA?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8
driver-class-name: com.mysql.cj.jdbc.Driver
B数据源别名:
username: BBB
password: BBBBBB
url: jdbc:mysql://127.0.0.1:3306/BBBB?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8
driver-class-name: com.mysql.cj.jdbc.Driver
4 修改tomcat配置,增加连接数,connector增加maxThreads=“10240” acceptCount=“10240”
5 修改linux默认打开文件句柄数
https://www.e-learn.cn/node/2959291
如果是通过宝塔启动tomcat,需额外修改
https://blog.youkuaiyun.com/LOUISLIAOXH/article/details/87934524
6 数据大于上百万时,不要直接执行全局更新sql,比如 update aa set bb=cc,通过cursor及loop来循环更新,每100条更新提交一次,将大事务转化成小事务,避免耗费数据库资源
//新建临时表存储数据,避免user表字段过多,查询慢
drop table batch_jobs;
create table batch_jobs(id varchar(255),name varchar(255));
insert into batch_jobs(id,name) select id,phone from zk_user;
DELIMITER //
DROP PROCEDURE IF EXISTS loop_user; //先删除存储过程,避免存储过程存在无法新建
CREATE PROCEDURE loop_user() //新建存储过程
BEGIN
declare userId varchar(64);
declare userName varchar(64);
declare cnt INT; //定义循环字段
DECLARE ids CURSOR FOR SELECT * FROM batch_jobs; //定义游标
SET cnt = 0;
OPEN ids;
LOOP
SET cnt = cnt+1;
if (MOD(cnt,100)=0) then //设置每100次更新提交一次
commit;
end if;
fetch ids into userId,userName; //取出游标中的值
update zk_user set is_system = '1' where id = userId ; //执行sql操作
END LOOP;
CLOSE ids;
END //
CALL loop_user();
7 如果一个update语句要同时更新多个字段,这些字段最好都是不会经常修改那种,比如头像昵称,一些经常修改的字段,比如浏览量什么的,不要和其他字段一起放进一个 update 语句,单独抽离出来,不然很容易出现脏数据。
8 如果有需要异步执行某个方法,一定要注意是否会出现脏数据情况,如果会出现,可以加个延迟
public void A(String userId){
异步执行{
B(userId);
}
User user = userService.get(userId);
user.setMoney(1.1);
userService.save(user);
}
public void B(String userId){
User user = userService.get(userId);
user.setType(2);
userService.save(user);
}
这种情况就大概率会出现脏数据,导致user的money没加进去
8 系统大量 time_wait 请求
没试过
https://blog.youkuaiyun.com/hemin1003/article/details/82963558