常用命令
top 查看进程pid
top -H -p 进程pid 查看线程pid
jstack 进程pid | grep 线程pid(16进制格式) -A 15 查看堆栈信息
#[命令转16进制printf "%x\n" 2344]
接口优化
1、批处理:批量操作数据库,可以在批处理执行完成后一次性插入或更新数据库,避免多次 IO。
2、异步处理:针对耗时比较长且不是结果必须的逻辑,我们可以考虑放到异步执行,这样能降低接口耗时。
3、空间换时间:合理使用缓存,针对一些频繁使用且不频繁变更的数据,可以提前缓存起来,需要时直接查缓存,避免频繁地查询数据库或者重复计算。缓存会带来的数据一致性问题。
4、预处理:就是预取思想,就是提前要把查询的数据,提前计算好,放入缓存或者表中的某个字段,用的时候会大幅提高接口性能。
5、池化思想: 我们都用过数据库连接池,线程池等,这就是池思想的体现,它们解决的问题就是避免重复创建对象或创建连接,可以重复利用,避免不必要的损耗,毕竟创建销毁也会占用时间。
池化思想包含但并不局限于以上两种,总的来说池化思想的本质是预分配与循环使用,明白这个原理后,我们即使是在做一些业务场景的需求时,也可以利用起来。
比如:对象池
6、串行改并行。
7、数据库索引。
8、避免大事务。
9、优化程序结构。
程序结构问题一般出现在多次需求迭代后,代码叠加形成。会造成一些重复查询、多次创建对象等耗时问题。
10、深分页问题
用where id >100000 limit 200代替limit 100000,200
局限性是需要一个连续自增的字段。
11、sql优化。
12、锁粒度避免过粗。
锁一般是为了在高并发场景下保护共享资源采用的一种手段,但是如果锁的粒度太粗,会很影响接口性能。
高效更新(update)MySQL百万级数据表更新某个字段
- 使用索引
在百万级数据表中进行数据更新,使用索引可以大大提高操作效率,避免锁表。索引可以使查询和更新操作更快速。如果没有适当的索引,查询和更新操作可能会变得很慢,这可能导致应用程序的响应时间变慢。因此,在进行更新操作之前,必须确保在要更新的字段上有适当的索引,这将显著提高操作速度。 - 使用批量更新
批量更新可以有效地减少数据更新过程中的延迟。在百万级数据表中,执行单个更新操作需要花费大量的时间,这时使用批量更新将会是一个理想的选择。使用批量更新可以将多个更新操作合并到一起。这不仅可以减少查询次数,还可以减少数据库的开销。如果数据库支持批量更新,那么批量更新可以在很短的时间内更新非常大的数据表。 - 使用事务
使用事务保证数据一致性。 - 考虑数据表分割
- 使用缓存,减少数据库查询和更新次数
- 使用优化工具
MySQL提供了各种工具,可以帮助您优化百万级数据表的查询和更新操作。这些工具包括跟踪和分析查询,优化表格锁定和索引,数据库分区等。使用这些工具可以提高系统的性能,并显著提高工作效率。 - 使用分页更新,避免大事务