我知道数据库可以将最常用的数据存储在 RAM 内存中以便快速访问,但是什么时候,什么数据?
1- 在此表中多次执行查询
id, name, gender
-- ----- -------
1 , Bill, Male.
2 , Todd, Male.
SELECT * FROM people WHERE gender = 'Male';
- 它可以在内存中保存的最小值是多少(列、行、页、表)?
- 在可以保存时进行 PK 或 FK 有什么区别?
- 如果我
UPDATE
是表或行,必须再次读取内存?
2 -JOIN
在这样的表中进行查询?
people
id, name, gender_id
-- ----- -------
1 , Bill, 2
2 , Todd, 2
people_gender
id, gender
-- -------
1 , Female.
2 , Male.
SELECT id, name, gender FROM people p JOIN people_gender pg ON p.gender_id = pg.id
- 数据库读取一次并保存 的值
people_gender.id
,然后它只能读取 4 个字节 + 2 个字节 inpeople.gender_id
= 6 个字节或者它必须 JOIN 并读取每一行,即使值是众所周知的 (1+4+1+4 = 10)? - 它的
JOIN
价值还是第一种情况对性能更好?
真正的基础可以是Sql Server
高达 16 GB RAM 或Postgresql
低至 1 GB RAM,它有一个保存事件状态的列,如 WORKING,WAITING,STOPPED 和 CANCELED(实际上不是英语,五个状态,8-10 个字符每个),它是如此常见的更新和/或返回表中的数据Event
,我从这里测试性能开始。
我在一个软件中工作,该软件在过去几年中增长了很多,现在正面临性能问题,这是为 DBA 工作的……但我们没有 :D。
我在 dba meta 中的第一个问题,很抱歉有任何错误,欢迎任何提示。
先感谢您。
这些 DBMS 的缓存处于块/页面级别。数据必须在内存中才能使用。高级过程是DBMS首先在缓存中查找,如果不存在,则将需要的块/页读取到内存中以供使用。实现细节因 DBMS 而异,但通常缓冲区由 LRU 算法重用,目的是将热数据保留在缓存中并逐出不常使用的数据,以便通过有限的内存资源实现最大的好处。
要解决性能问题,请执行查询和索引调整,以便必须从存储中检索最少数量的数据并添加尽可能多的内存用于缓存。