问一个 oracle 的 问题
5个回答
展开全部
sql语句 第一次执行之前会有个硬解析的过程。
1. 加载到共享池中 - SQL源代码被加载到内存中。
2. 语法解析 - Oracle检查语法拼写错误。
3. 语义解析 - Oracle验证来自数据字典的所有表名和列名并且验证你是否有权访问这些数据。
4. 查询转换 - 如果允许(query_rewrite=true),oracle将把复杂的SQL转换为等价的简单形式。
5. 优化 - 根据模式的统计信息创建执行计划(在10g中或许会使用动态的样本统计信息)。
6. 创建可执行文件 - Oracle创建一个服务于SQL查询的、调用本地文件的可执行文件。
Oracle提供了 shared_pool_size参数来缓存SQL从而使我们不需要重复解析SQL(也就是第二次执行同一条sql的时候)。但是,如果shared_pool_size设置太小或者在代码中使用了非重用的SQL(例如包含直接量where name="fred"),SQL语句可能会过期。
在Oracle中软解析和硬解析的区别是什么?仅仅是上面用红色标明的第一步。也就是说,软解析不需要重新装载到共享池(以及相关的内存分配)。
通常很高的解析调用次数(>10/秒)表明你的系统有大量不同的SQL语句,或者你的SQL语句没有被重用(例如,没有使用绑定变量)。
硬解析需要把 SQL语句加载到共享池中。硬解析比软解析差很多,因为它牵涉到共享池中内存的分配和管理。一旦被加载,SQL必须完全重新检查语法和语义以及生成可执行目标。
如果shared_pool_size设置的太小或者SQL语句没有重用,则会发生大量的硬解析。
所以要适当的设置共享池大小并且通过主机变量重用SQL。
1. 加载到共享池中 - SQL源代码被加载到内存中。
2. 语法解析 - Oracle检查语法拼写错误。
3. 语义解析 - Oracle验证来自数据字典的所有表名和列名并且验证你是否有权访问这些数据。
4. 查询转换 - 如果允许(query_rewrite=true),oracle将把复杂的SQL转换为等价的简单形式。
5. 优化 - 根据模式的统计信息创建执行计划(在10g中或许会使用动态的样本统计信息)。
6. 创建可执行文件 - Oracle创建一个服务于SQL查询的、调用本地文件的可执行文件。
Oracle提供了 shared_pool_size参数来缓存SQL从而使我们不需要重复解析SQL(也就是第二次执行同一条sql的时候)。但是,如果shared_pool_size设置太小或者在代码中使用了非重用的SQL(例如包含直接量where name="fred"),SQL语句可能会过期。
在Oracle中软解析和硬解析的区别是什么?仅仅是上面用红色标明的第一步。也就是说,软解析不需要重新装载到共享池(以及相关的内存分配)。
通常很高的解析调用次数(>10/秒)表明你的系统有大量不同的SQL语句,或者你的SQL语句没有被重用(例如,没有使用绑定变量)。
硬解析需要把 SQL语句加载到共享池中。硬解析比软解析差很多,因为它牵涉到共享池中内存的分配和管理。一旦被加载,SQL必须完全重新检查语法和语义以及生成可执行目标。
如果shared_pool_size设置的太小或者SQL语句没有重用,则会发生大量的硬解析。
所以要适当的设置共享池大小并且通过主机变量重用SQL。
仁科信息
2024-07-24 广告
2024-07-24 广告
Oracle EBS运维是确保企业资源规划系统稳定、高效运行的关键环节。它涵盖了系统监控、性能优化、故障排查与恢复等多方面内容。通过持续的监控和数据分析,运维团队能够及时发现并解决潜在问题,保障系统的稳定性和安全性。同时,他们还需要与业务部...
点击进入详情页
本回答由仁科信息提供
展开全部
这是服务器的缓存技术,重复执行的SQL能快速得到结果。
要让第一次执行都很快的话,注意WHERE和ORDER BY后面的字段都有索引。
要让第一次执行都很快的话,注意WHERE和ORDER BY后面的字段都有索引。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为第一次要解析编译你的句语,以后他记住了就快了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
执行语句是 有执行计划的,
好比你做一个表关联查询。
先关联数据少的是不是比关联数据多的 查询速度要快啊。。第一次其实就大概做这些操作。第二次 就不需要了。所以要快。。。。其实就是oracle服务刚起来的第一次
好比你做一个表关联查询。
先关联数据少的是不是比关联数据多的 查询速度要快啊。。第一次其实就大概做这些操作。第二次 就不需要了。所以要快。。。。其实就是oracle服务刚起来的第一次
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
主要是两个原因:
1、sga中的library cache,用于记录sql解析信息。第一次执行的时候要解析sql,第二次执行的时候不用解析了。
2、data buffer cache,用于缓存数据块。第一次取数要到硬盘上去取,第二次能在内存中找到,这个节省了很多时间。
1、sga中的library cache,用于记录sql解析信息。第一次执行的时候要解析sql,第二次执行的时候不用解析了。
2、data buffer cache,用于缓存数据块。第一次取数要到硬盘上去取,第二次能在内存中找到,这个节省了很多时间。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询