![]() |
1
6
你的同事是对的。 默认情况下,Perl模块dbd::mysql使用mysql_store_result,它确实读取所有选择的数据并将其缓存到RAM中。除非更改该默认值,否则当您在DBI中逐行获取数据时,它只是从内存缓冲区中读取数据。 这通常是您想要的,除非您有非常大的结果集。否则,在从mysqld中获取最后一个数据之前,它必须将该数据保持就绪,我的理解是,它会导致写入相同行(块)时出现块。桌子?). 记住,现代机器有很多RAM。一百万行结果集通常不是什么大问题。即使每行的大小都相当大,只有1 GB的RAM加上开销。
如果要处理数百万行的blob,可能需要mysql使用结果,也可能需要以块的形式选择这些行,并逐步使用
参见mysql_use_result和mysql_store_result in
|
![]() |
2
6
这不是真的(如果我们谈论的是数据库服务器本身,而不是客户机层)。
如果使用内联视图,则会缓冲结果集。(
即使
不过,你可以明确指示
见 docs 更多细节。 |
![]() |
3
3
不,这不是它的工作原理。 数据库不会在RAM/SWAP中保存行。 但是,它会尝试,并且MySQL会在这里努力,尽可能多地缓存(索引、结果等)。MySQL配置为不同类型的缓存(不同类型的存储引擎)提供可用内存缓冲区的值-不应允许交换此缓存。
测试它
如果你真的在
另外,如果您启用实际发布到MySQL的语句日志,并为我们提供一个副本,那么我们(非Perl人员)可以对MySQL将做什么给出更明确的答案。 |
![]() |
4
1
我不太熟悉这一点,但在我看来dbd::mysql可以预先获取所有内容,或者仅在需要时根据mysql_use_result属性获取所有内容。请参阅dbd::mysql和mysql文档。 |
![]() |
Matthew Thibodeau · JavaFX图像错误[重复] 6 年前 |
![]() |
user3239349 · C#UWP动态更改全局字体 6 年前 |
![]() |
Diego · net core 2.0读取文件添加为资源 7 年前 |
![]() |
Asif Mushtaq · Java 9模块系统资源文件位置 7 年前 |
![]() |
Jaeger · 使用单个资源更新时Rails无路由匹配帖子url 7 年前 |