Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server插入流_Sql_Sql Server - Fatal编程技术网

SQL Server插入流

SQL Server插入流,sql,sql-server,Sql,Sql Server,正如我在互联网上阅读一些文章时所理解的,SQLServer有一个缓冲区缓存,它在其中存储页面,当执行insert语句时,修改后的数据只写入内存中的缓冲区,而不写入磁盘 当系统检查点出现时,所有脏页都会刷新到磁盘 这是否意味着,当我们执行insert语句并得到一个返回值,表示一切正常时,数据可能仍不会写入磁盘,理论上,如果系统崩溃发生在检查点之前,脏页不会保存到磁盘,尽管我们收到的信息表明一切正常,事务已提交?否。因为您完全忽略了机制的第二部分-日志文件。日志文件保存所有更改的页面,并刷新到光盘。

正如我在互联网上阅读一些文章时所理解的,SQLServer有一个缓冲区缓存,它在其中存储页面,当执行insert语句时,修改后的数据只写入内存中的缓冲区,而不写入磁盘

当系统检查点出现时,所有脏页都会刷新到磁盘


这是否意味着,当我们执行insert语句并得到一个返回值,表示一切正常时,数据可能仍不会写入磁盘,理论上,如果系统崩溃发生在检查点之前,脏页不会保存到磁盘,尽管我们收到的信息表明一切正常,事务已提交?

否。因为您完全忽略了机制的第二部分-日志文件。日志文件保存所有更改的页面,并刷新到光盘。如果发生崩溃,在启动时,服务器将重播日志文件中的更改。

否。因为您完全忽略了机制的第二部分-日志文件。日志文件保存所有更改的页面,并刷新到光盘。如果发生崩溃,在启动时,服务器将重播日志文件中的更改。

您对系统工作方式的理解过于简单。SQL Server(通常)与ACID兼容。您对系统工作方式的理解过于简单。SQL Server(通常)是ACID兼容的。但日志不会立即写入文件,它是在页面写入磁盘之前写入的,也是在检查点上。啊,全部读取。点击链接。谢天谢地,我第一次没有看到这个链接,这一行很关键:当事务提交时,日志记录被写入磁盘。我现在明白了。我现在想到一个问题。这是否意味着,如果我们在一个事务中有5000个插入,它的执行速度会比每个插入都在它自己的事务中快?因为在第一种情况下,日志只会写入事务日志文件一次,而在第二种情况下,日志会写入文件5000次……通常是Aleksa。但这并不是那么简单。这实际上取决于数据量、表结构(索引、触发器、分区等)和数据库文件配置。我的意思是,一次插入所有5000行可能比一行一行更快,但对于500.000行,一次插入5000行可能更快,在100个事务中。这里的最佳实践是一次找到要插入的正确行数,注意日志文件的增长限制。但日志不会立即写入文件,它是在页面写入磁盘之前写入的,也是在检查点上。啊,全部读取。点击链接。谢天谢地,我第一次没有看到这个链接,这一行很关键:当事务提交时,日志记录被写入磁盘。我现在明白了。我现在想到一个问题。这是否意味着,如果我们在一个事务中有5000个插入,它的执行速度会比每个插入都在它自己的事务中快?因为在第一种情况下,日志只会写入事务日志文件一次,而在第二种情况下,日志会写入文件5000次……通常是Aleksa。但这并不是那么简单。这实际上取决于数据量、表结构(索引、触发器、分区等)和数据库文件配置。我的意思是,一次插入所有5000行可能比一行一行更快,但对于500.000行,一次插入5000行可能更快,在100个事务中。这里的最佳实践是一次找到要插入的正确行数,注意日志文件的增长限制。