技巧:网站SEO优化挖掘关键词的方法有哪些?
优采云 发布时间: 2022-11-18 08:32技巧:网站SEO优化挖掘关键词的方法有哪些?
当我们在百度上搜索任何内容时,您可以在搜索结果页面的底部找到“相关推广”。这部分内容也和你输入的主要关键词相关度很高,也可以给百度关键词推广挖掘提供参考。
4.百度指数
使用百度指数,可以找到很多关键词,还可以看到搜索这些关键词的用户来源,帮助企业获取用户。
5. 研究竞争对手的网站关键词
去看看你的竞争对手 关键词 现有更好的排名,也可以作为 关键词 挖掘参考。
6.百度百科
百度百科是挖掘百度关键词的重要方法。上面的收录条目是关键词,可以一个一个使用。可以选择符合自己推广需求的target关键词,然后整合到对应的长尾关键词中。
7.百度知道
百度知道,虽然它是一个问答平台,但它确实挖掘了关键词的宝贵资源,因为它反映了大多数用户的搜索需求和关注点。进入正题关键词,可以找到与正题关键词相关的对应词、词组、短句等,然后自行选择整合。
以上就是百恒科技小编分享的在网站SEO优化中挖掘关键词的一些方法,也是小编在日常生活中常用的方法。感谢您阅读。希望能对广大SEO站长有所帮助。如果您想了解更多,欢迎留言咨询百恒科技。南昌互联网公司百恒科技专注于建设南昌网站开发、小程序开发、APP开发、电子商务购物网站开发、物联网开发等互联网服务。
推荐相关内容: 为什么网站关键词排名不稳定?
站长是怎么把关键词放到百度下拉的?
最佳实践:Oracle的SQL Tuning Advisor STA(SQL语句优化工具)
SQL 调优顾问 STA 是 Oracle10g 中推出的一款 DBA 优化工具,具有简单、智能的特点,DBA 值需要调用函数才能针对性能不佳的语句给出优化结果。让我们来看看它的用途。
使用 STA 时,请确保优化器处于 CBO 模式。
首先,使用 STA 优化语句
问题陈述的采集可以通过 Oracle10g 的另一个自动化工具完成:数据库自动诊断监视工具 (ADDM)。有关其用法,请参阅另一篇文章,文章“Oracle 10g 数据库自动诊断监视工具 (ADDM) 用户指南”。
让我们简要描述一下如何优化找到的问题陈述。如前所述,STA 使用起来非常简单(只要可以调用存储过程,就可以使用此工具),可以通过三个步骤完成语句调优。
测试环境创建:
SQL> 创建表 BIGTAB 作为选择 rownum 作为 “id”, a.* 从 dba_objects a;
已创建表。
SQL>创建表小选项卡作为选择行数作为“id”,a.*从dba_tables a;
已创建表。
SQL> ALTER TABLE BIGTAB MODIFY (empno NUMBER);
表已更改。
SQL>声明
n 数;
开始
对于 N 在 1..100
圈
插入到大标签中选择行数作为“ID”,a.*从dba_objects a;
犯;
结束循环;
结束;
/
PL/SQL 过程已成功完成。
这里创建一个大表和一个小表,并且没有索引,下面执行一个查询:
SQL>设置计时
SQL> set autot on
SQL>从大标签 a 中选择 count(*),小标签 b 其中 a.object_name=b.table_name;
计数(*)
----------
135000已用:00
:00:05.59
执行计划
----------------------------------------------------------
计划哈希值:3089226980
--------------------------------------------------------------------------------
|同上||操作名称|行|字节|成本(%CPU)|时间|
--------------------------------------------------------------------------------
| 0 |选择语句| |1 | 36 |3550 (2)|00:00:43 |
| 1 |对聚合|进行排序 |1 | 36 | | |
|*2 |哈希联接| |155K|5462K|3550 (2)|00:00:43 |
| 3 | 表访问已满|小标签 |1223 |22014 | 11 (0)|00:00:01 |
| 4 | 表访问已满|大标签 |1205K| 20米|3526 (1)|00:00:43 |
--------------------------------------------------------------------------------
谓词信息(由操作 ID 标识):
---------------------------------------------------
2 - 访问(“A”.”OBJECT_NAME“=”B“。”TABLE_NAME”)
统计学
----------------------------------------------------------
0递归调用
0db 块获取
16013一致获取
14491物理读取
0重做大小
412字节通过SQL*Net发送到客户端
通过 SQL*Net 从客户端接收 385 字节
2SQL*往返客户端的净往返
0 排序(内存)
0 排序(磁盘)
1已处理行
可以看出,该语句的执行性能很差:16013 一致 gets。
步骤 1:创建并执行优化任务
通过调用存储过程EXECUTE_TUNING_TASK执行的函数CREATE_TUNING_TASK来创建优化任务:
SQL> set autot off
SQL>设置定时关闭
SQL>声明
2 my_task_name 瓦尔查尔2(30);
3 my_sqltext CLOB;
4开始
5 my_sqltext := '从大标签 A 中选择计数(*),小标签 B 其中 a.object_name=b.table_name';
6 my_task_name := DBMS_SQLTUNE。CREATE_TUNING_TASK(
7 sql_text => my_sqltext,
8 user_name => '演示',
9 范围 => “全面”,
10 time_limit=> 60,
11 task_name => 'tuning_sql_test',
12 描述 => “调整指定表上的查询的任务”);
13
14 DBMS_SQLTUNE。EXECUTE_TUNING_TASK( task_name => 'tuning_sql_test');
15完;
16/
PL/SQL 过程已成功完成。
在函数CREATE_TUNING_TASK中,sql_text是需要优化的语句,user_name是语句通过哪个用户执行的,范围是优化范围(有限或全面),time_limit优化过程的时间限制,task_name优化任务名称,描述优化任务描述。
您可以通过视图USER_ADVISOR_LOG和USER_ADVISOR_LOG查看已创建的优化任务。
SQL>从USER_ADVISOR_LOG中选择task_name,状态,其中task_name='tuning_sql_
测试';
TASK_NAME状态
------------------------------ -----------
tuning_sql_test已完成
步骤 2:查看优化结果
可以通过函数查看优化结果。
SQL>设置长10000
SQL>设置长块大小1000
SQL>设置行大小100
SQL>选择“DBMS_SQLTUNE”。REPORT_TUNING_TASK( 'tuning_sql_test') 来自 DUAL;
DBMS_SQLTUNE。REPORT_TUNING_TASK(“TUNING_SQL_TEST”)
----------------------------------------------------------------------------------------------------
一般信息部分
-------------------------------------------------------------------------------
调优任务名称:tuning_sql_test
调优任务负责人 : 演示
范围 : 综合
时限(秒) : 60
完成状态 : 已完成
开始于 : 11/30/2005 13:16:43
完成于 : 11/30/2005 13:16:44
发现指数数量 : 1
架构名称:演示
SQL ID : 6p64dnnsqf9pm
SQL 文本:从大标签 a 中选择计数(*),其中小标签 b
a.object_name=b.table_name
-------------------------------------------------------------------------------
调查结果部分(1项)
-------------------------------------------------------------------------------
1-索引查找(请参阅下面的解释计划部分)
可以通过创建一个或多个来改进此语句的执行计划
指标。
建议(估计获益:100%)
----------------------------------------
- 考虑运行访问顾问以改进物理架构设计
或创建建议的索引。
创建索引演示。IDX$$_06C50001 演示。SMALLTAB('TABLE_NAME');
- 考虑运行访问顾问以改进物理架构设计
或创建建议的索引。
创建索引演示。IDX$$_06C50002 演示版。BIGTAB('OBJECT_NAME');
理由
---------
创建推荐的索引可显著改进执行计划
的声明。但是,最好运行“访问顾问”
使用代表性的 SQL 工作负载,而不是单个语句。这
将允许获得全面的指数建议,其中包括
帐户索引维护开销和额外空间消耗。
“解释计划”部分
-------------------------------------------------------------------------------
1-原装
-----------
计划哈希值:3089226980
--------------------------------------------------------------------------------
|同上||操作名称|行|字节|成本(%CPU)|时间|
--------------------------------------------------------------------------------
| 0 |选择语句| |1 | 36 |3550 (2)|00:00:43 |
| 1 |对聚合|进行排序 |1 | 36 | | |
|*2 |哈希联接| |155K|5462K|3550 (2)|00:00:43 |
| 3 | 表访问已满|小标签 |1223 |22014 | 11 (0)|00:00:01 |
| 4 | 表访问已满|大标签 |1205K| 20米|3526 (1)|00:00:43 |
--------------------------------------------------------------------------------
谓词信息(由操作 ID 标识):
---------------------------------------------------
2 - 访问(“A”.”OBJECT_NAME“=”B“。”TABLE_NAME”)
2-使用新指数
--------------------
计划哈希值:494801882
-----------------------------------------------------------------------------------------
|同上||操作名称|行|字节|成本(%CPU)|时间|
-----------------------------------------------------------------------------------------
| 0 |选择语句| |1 | 36 |1108 (3)|00:00:14 |
| 1 |对聚合|进行排序 |1 | 36 | | |
|*2 |哈希联接| |155K|5462K|1108 (3)|00:00:14 |
| 3 | 索引快速完全扫描|IDX$_06C50001 |1223 |22014 |3 (0)|00:00:01 |
| 4 | 索引快速完全扫描|IDX$_06C50002 |1205K| 20米|1093 (2)|00:00:14 |
-----------------------------------------------------------------------------------------
谓词信息(由操作 ID 标识):
---------------------------------------------------
2 - 访问(“A”.”OBJECT_NAME“=”B“。”TABLE_NAME”)
-------------------------------------------------------------------------------
看看这个优化报告:
第一部分是这个优化任务的基本信息:比如任务名称、执行时间、作用域、涉及的语句等。
第二部分是关于在此优化任务中发现的问题以及给出的优化建议。前面已经描述了这个问题:可以通过构建更多的引文来提高性能;然后是建议的具体内容:在表小标签的字段table_name上创建索引,在表大表的字段object_name上创建索引;最后,还有相关说明:虽然本次优化给出了创建索引的建议,但最好结合整个数据库的工作负载,对 SQL Access Advisor SAA 进行深入分析,这样才能给出考虑索引维护、空间消耗等因素的更合理的建议。
最后,报表还给出了原创查询计划以及使用优化建议后的查询计划对比。可以看出,成本值大幅下降。
第 3 步:按照优化建议进行优化
首先要注意的是,最好不要直接根据优化器给出的建议进行优化。因为索引等操作不会影响此语句。第二个是 SQL 配置文件可用于优化语句或某些会话(下一章将介绍如何使用 SQL 配置文件)。我们只是在这里验证优化建议的有效性。
根据建议,创建两个索引:
SQL> 在 smalltab(table_name) 上创建索引smalltab_idx1;
已创建索引。
SQL> 在 bigtab(object_name) 上创建索引bigtab_idx1;
已创建索引。
SQL>分析表小标签计算统计;
表分析。
SQL>分析表大表计算统计信息;
表分析。
SQL>设置计时
SQL> set autot on
SQL>从大标签 a 中选择 count(*),小标签 b 其中 a.object_name=b.table_name;
计数(*)
----------
135000已用:00
:00:01.09
执行计划
----------------------------------------------------------
计划哈希值:2594317117
----------------------------------------------------------------------------------------
|同上||操作名称|行|字节|成本(%CPU)|时间|
----------------------------------------------------------------------------------------
| 0 |选择语句| |1 | 36|1119(3)|00:00:14 |
| 1 |对聚合|进行排序 |1 | 36 | | |
|*2 |哈希联接| |155K|5463K|1119 (3)|00:00:14 |
| 3 | 索引快速完全扫描|SMALLTAB_IDX1 |1223 |22014 |3 (0)|00:00:01 |
| 4 | 索引快速完全扫描|BIGTAB_IDX1 |1205K| 20米|1104 (2)|00:00:14 |
----------------------------------------------------------------------------------------
谓词信息(由操作 ID 标识):
---------------------------------------------------
2 - 访问(“A”.”OBJECT_NAME“=”B“。”TABLE_NAME”)
统计学
----------------------------------------------------------
332递归调用
0db 块获取
4999一致获取
1物理读取
0重做大小
412字节通过SQL*Net发送到客户端
通过 SQL*Net 从客户端接收 385 字节
2SQL*往返客户端的净往返
12种(内存)
0 排序(磁盘)
1已处理行
可以看出,一致性 get 比优化前要低得多,优化建议确实提高了性能。
Oracle 10g 让优化变得如此简单。
其次,使用 SQL 配置文件存储优化策略
使用 STA 优化语句后,
STA对语句进行分析,采用最优优化策略,给出优化的查询方案。您可以根据 STA 给出的建议重写语句。但是,在某些情况下,您可能无法重写语句(例如,在语句位于包中的生产环境中)。此时可以使用 SQL 配置文件将优化策略存储在配置文件中,Oracle 在构建此语句的查询计划时不会使用现有的相关统计信息,而是使用配置文件策略生成新的查询计划。
第一部分:配置文件的使用
SQL 配置文件对以下类型语句有效:
选择语句;
更新声明;
插入语句(仅在使用 SELECT 子句时有效);
删除语句;
CREATE 语句(仅在使用 SELECT 子句时有效);
合并语句(仅作为更新和插入操作有效)。
此外,使用 SQL 配置文件必须具有系统权限,例如创建任何 SQL 配置文件、删除任何 SQL 配置文件和更改任何 SQL 配置文件。
我们举个例子:
步骤 1:向用户分配权限
SQL> conn sys/sys as sysdba
连接。
SQL>授予创建任何SQL配置文件进行演示;
格兰特成功了。
SQL>授予删除任何SQL配置文件到演示;
格兰特成功了。
SQL>授予更改任何SQL配置文件以进行演示;
格兰特成功了。
SQL> conn demo/demo
连接。
SQL> 在 smalltab(table_name) 上创建索引smalltab_idx1;
已创建索引。
SQL>分析表小标签计算统计;
表分析。
SQL> set autot on
SQL>从小选项卡中选择 /*+no_index(smalltab smalltab_idx1)*/count(*),其中
ble_name = 'TAB$';
计数(*)
----------
1
执行计划
----------------------------------------------------------
计划哈希值:2298554444
-------------------------------------------------------------------------------
|同上||操作名称|行|字节|成本(%CPU)|时间|
-------------------------------------------------------------------------------
| 0 |选择语句| |1 | 18 | 11 (0)|00:00:01 |
| 1 |对聚合|进行排序 |1 | 18 | | |
|*2 |表访问已满|小标签|1 | 18 | 11 (0)|00:00:01 |
-------------------------------------------------------------------------------
第二步是创建并执行优化任务
SQL>声明
2 my_task_name 瓦尔查尔2(30);
3 my_sqltext CLOB;
4开始
5 my_sqltext := '选择 /*+no_index(小标签 smalltab_idx1)*/计数(*) 从
小选项卡,其中table_name = “TAB$”;
6 my_task_name := DBMS_SQLTUNE。CREATE_TUNING_TASK(
7 sql_text => my_sqltext,
8 user_name => '演示',
9 范围 => “全面”,
10 time_limit=> 60,
11 task_name => 'sql_profile_test',
12 描述 => “调整指定表上的查询的任务”);
13
14 DBMS_SQLTUNE。EXECUTE_TUNING_TASK( task_name => 'sql_profile_test');
15完;
16/
PL/SQL 过程已成功完成。
第 3 步:查看优化建议
SQL> set autot off
SQL>设置长10000
SQL>设置长块大小1000
SQL>设置行大小100
SQL>选择“DBMS_SQLTUNE”。REPORT_TUNING_TASK( 'sql_profile_test') 来自 DUAL;
DBMS_SQLTUNE。REPORT_TUNING_TASK(“SQL_PROFILE_TEST”)
----------------------------------------------------------------------------------------------------
一般信息部分
-------------------------------------------------------------------------------
调优任务名称:sql_profile_test
调优任务负责人 : 演示
范围 : 综合
时限(秒) : 60
完成状态 : 已完成
开始于 : 11/29/2005 14:52:09
完成于 : 11/29/2005 14:52:09
SQL 概要文件结果数 : 1
DBMS_SQLTUNE。REPORT_TUNING_TASK(“SQL_PROFILE_TEST”)
-------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
架构名称:演示
SQL ID : 3kta54ycuqccb
SQL 文本:从中选择 /*+no_index(小选项卡 smalltab_idx1)*/计数(*)
小选项卡,其中table_name = 'TAB$'
-------------------------------------------------------------------------------
调查结果部分(1项)
-------------------------------------------------------------------------------
1-SQL配置文件查找(请参阅下面的解释计划部分)
DBMS_SQLTUNE。REPORT_TUNING_TASK(“SQL_PROFILE_TEST”)
--------------------------------------------------------------------------------
---------------------------------------------------------------------------
为此语句找到了可能更好的执行计划。
建议(估计收益:90.94%)
------------------------------------------
- 考虑接受建议的 SQL 配置文件。
execute dbms_sqltune.accept_sql_profile(task_name => 'sql_profile_test',
替换 => 真);
-------------------------------------------------------------------------------
“解释计划”部分
DBMS_SQLTUNE。REPORT_TUNING_TASK(“SQL_PROFILE_TEST”)
--------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
1-原件,调整后成本
------------------------------
计划哈希值:2298554444
-------------------------------------------------------------------------------
|同上||操作名称|行|字节|成本(%CPU)|时间|
-------------------------------------------------------------------------------
| 0 |选择语句| |1 | 18 | 11 (0)|00:00:01 |
| 1 |对聚合|进行排序 |1 | 18 | | |
DBMS_SQLTUNE。REPORT_TUNING_TASK(“SQL_PROFILE_TEST”)
----------------------------------------------------------------------------------------------------
|*2 |表访问已满|小标签|1 | 18 | 11 (0)|00:00:01 |
-------------------------------------------------------------------------------
谓词信息(由操作 ID 标识):
---------------------------------------------------
2 - 过滤器(“TABLE_NAME”='TAB$')
2-使用SQL配置文件
--------------------
计划哈希值:2664476518
DBMS_SQLTUNE。REPORT_TUNING_TASK(“SQL_PROFILE_TEST”)
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------
|同上||操作名称|行|字节|成本(%CPU)|时间
|
-----------------------------------------------------------------------------------
| 0 |选择“语句| |1 | 18 |1 (0)|00:00:01 |
| 1 |对聚合|进行排序 |1 | 18 | ||
|*2 |索引范围扫描|SMALLTAB_IDX1 |1 | 18 |1 (0)|00:00:01 |
-----------------------------------------------------------------------------------
谓词信息(由操作 ID 标识):
---------------------------------------------------
DBMS_SQLTUNE。REPORT_TUNING_TASK(“SQL_PROFILE_TEST”)
----------------------------------------------------------------------------------------------------
2 - 访问(“TABLE_NAME”='TAB$')
-------------------------------------------------------------------------------
在这里,您可以看到优化建议中给出了新的查询计划。现在,我们决定接受这个建议,而不是重写声明。
第 3 步:接受配置文件
SQL>声明
2 my_sqlprofile_name 瓦尔查尔2(30);
3开始
4 my_sqlprofile_name := DBMS_SQLTUNE。ACCEPT_SQL_PROFILE (
5 task_name => 'sql_profile_test',
6 名称 => 'my_sql_profile');
7完;
8/
PL/SQL 过程已成功完成。
这里使用了包DBMS_SQLTUNE的另一个函数:ACCEPT_SQL_PROFILE。其中,参数task_name我们创建的优化推荐任务的名称,name 是配置文件的名称,可以是任意法定名称。此外,这个函数还有一些其他的功能,这里是这个函数的原型:
DBMS_SQLTUNE。ACCEPT_SQL_PROFILE (
task_name 因瓦尔查尔2,
object_id 数字 := 空,
名称 INVARCHAR2 := 空,
描述INVARCHAR2 := NULL,
类别 INVARCHAR2 := 空;
task_owner 在 VARCHAR2:= 空,
替换布尔值 := 假,
force_matchIN布尔值:= 假)
返回瓦尔查尔2;描述
是配置文件的描述; task_owner是优化建议任务的所有者;当 REPLACE 为 TRUE 时,如果配置文件已存在,请替换该配置文件;当force_match为 TURE 时,表示强制匹配语句,即强制绑定变量,类似于系统参数 cursor_sharing 设置为 FORCE 时,FALSE 时类似于将cursor_sharing设置为 EXACT,即 它完全匹配。
这里特别值得一提的是类别参数,您可以设置该参数以指定特定会话的配置文件。在 10g 中,每个会话都有一个新参数SQLTUNE_CATEGORY,他的默认值为 DEFAULT。当我们调用这个函数时,如果我们不指定这个参数,它的值也是默认的,如果我们为此配置文件指定一个不同的 CATEGORY 值,比如FOR_TUNING,那么这个 porfile 只会在会话参数 SQLTUNE_CATEGORY 也是FOR_TUNING时才使用。为什么此参数有用?想象一下这样一个环境,你使用 STA 在生产系统上调整一个语句,STA 给出了优化建议,但你不敢急于实现它给出的建议(毕竟它只是一台机器,你不能完全信任它),你可以创建一个带有特殊 CATEGORY 的配置文件,然后在你自己的会话中为这个特殊的 CATEGORY 开发SQLTUNE_CATEGORY。然后,您可以在不影响生产环境的情况下看到优化建议的实际效果。
您还可以查看通过视图DBA_SQL_PROFILES创建的配置文件。
步骤 4:检查配置文件的效果
SQL>从小选项卡中选择 /*+no_index(smalltab smalltab_idx1)*/count(*),其中
ble_name = 'TAB$';
计数(*)
----------
1
执行计划
----------------------------------------------------------
计划哈希值:2664476518
-----------------------------------------------------------------------------------
|同上||操作名称|行|字节|成本(%CPU)|时间|
-----------------------------------------------------------------------------------
| 0 |选择“语句| |1 | 18 |1 (0)|00:00:01 |
| 1 |对聚合|进行排序 |1 | 18 | ||
|*2 |索引范围扫描|SMALLTAB_IDX1 |1 | 18 |1 (0)|00:00:01 |
-----------------------------------------------------------------------------------
谓词信息(由操作 ID 标识):
---------------------------------------------------
2 - 访问(“TABLE_NAME”='TAB$')
注意
-----
- 用于此语句的 SQL 配置文件“my_sql_profile”
如您所见,该语句获取配置文件中的数据并创建新的查询计划。并且查询计划中还有一些附加信息,表明此语句使用“my_sql_profile”的配置文件,而不是根据对象的统计信息生成查询计划。
第二部分:配置文件的控制
配置文件的控制相对简单:修改和删除。包DBMS_SQLTUNE提供了两个存储过程来完成这两个过程:ALTER_SQL_PROFILE 和 DROP_SQL_PROFILE。
开始
DBMS_SQLTUNE。DROP_SQL_PROFILE(名称 => 'my_sql_profile');
结束;
/
1.配置文件的修改
ALTER_SQL_PROFILE的原型是:
DBMS_SQLTUNE。ALTER_SQL_PROFILE (
名称 INVARCHAR2,
attribute_name 因瓦尔查尔2,
值 INVARCHAR2);
其中,name 是配置文件的名称;attribute_name是需要修改的属性的名称;value 是修改后的值。例如,如果需要使“my_sql_profile”失效,可以将“状态”属性更改为“已禁用”:
SQL>开始
2 DBMS_SQLTUNE。ALTER_SQL_PROFILE(
3 名称 => 'my_sql_profile',
4 attribute_name=> “状态”,
5 值 => “禁用”);
6完;
7/
PL/SQL 过程已成功完成。
SQL>
SQL> set autot on exp
SQL>从小选项卡中选择 /*+no_index(smalltab smalltab_idx1)*/count(*),其中
ble_name = 'TAB$';
计数(*)
----------
1
执行计划
----------------------------------------------------------
计划哈希值:2298554444
-------------------------------------------------------------------------------
|同上||操作名称|行|字节|成本(%CPU)|时间|
-------------------------------------------------------------------------------
| 0 |选择语句| |1 | 18 | 11 (0)|00:00:01 |
| 1 |对聚合|进行排序 |1 | 18 | | |
|*2 |表访问已满|小标签|1 | 18 | 11 (0)|00:00:01 |
-------------------------------------------------------------------------------
谓词信息(由操作 ID 标识):
---------------------------------------------------
2 - 过滤器(“TABLE_NAME”='TAB$')
2. 删除配置文件
DROP_SQL_PROFILE的原型是:
DBMS_SQLTUNE。DROP_SQL_PROFILE (
名称 INVARCHAR2,
忽略 INBOOLEAN:= FALSE);
其中,name 是配置文件的名称,当忽略为 TRUE 时,当指定的配置文件不存在时,不会报告任何错误。
3. 检查语句是否已经有对应的配置文件
当然,我们也想确认某个语句是否已经形成了配置文件,看看是否需要对其进行调整。此时,您可以利用SQLTEXT_TO_SIGNATURE功能:
SQL>将服务器输出设置为打开
SQL>声明
2 v_signature号码;
3开始
4 v_signature:=DBMS_SQLTUNE。SQLTEXT_TO_SIGNATURE (
5 sql_text => '选择 /*+no_index(smalltab smalltab_idx1)*/count(*) 从 smalltab 中 table_name = ''TAB$''',
6 force_match => 假);
7 如果v_signature为空,则
8 DBMS_OUTPUT.put_line('profile中没有这样的sql文本');
其他 9 个
10 DBMS_OUTPUT.put_line('sql text is in profile');
11 结束如果;
12结束;
13/
sql 文本在配置文件中
PL/SQL 过程已成功完成。
其中,sql_text是需要检测的内容;force_match的解释与ACCEPT_SQL_PROFILE中的相应参数相同。
第 3 部分:转储和移植配置文件在某些环境中,例如生产环境的安全要求非常高,不可能直接优化生产环境,
只能在与生产环境一致的镜像环境中进行优化,那么如果要将优化结果实现到生产环境中,该怎么办?DBMS_SQLTUNE包提供了几个附加函数,用于将数据从配置文件导出到表,然后可以将其移植到其他环境,下面介绍了如何使用它们。
步骤一:创建存储表
首先使用存储过程创建一个存储配置文件的表:
SQL>开始
2DBMS_SQLTUNE。CREATE_STGTAB_SQLPROF (
3 table_name => 'PROFILE_STGTAB',
4 schema_name => “演示”,
5 tablespace_name => '埃德加德莫');
6完;
7/
PL/SQL 过程已成功完成。
SQL> desc PROFILE_STGTAB
名称为空? 类型
----------------------------------------------------- -------- ----------------
--------------------
PROFILE_NAME 瓦尔查尔2(30)
类别 瓦尔查尔2(30)
签名号码
SQL_TEXT 克洛布
描述 瓦尔查2(500)
瓦尔查尔2型(9)
状态瓦尔查尔2(8)
BOOLEAN_FLAGS编号
属性SQLPROF_ATTR
版本号
备用1 CLOB
Spaare2 BLOB
Table_name 是要创建的存储表的名称,schema_name它所属的模式的名称tablespace_name它所属的表空间。
此外,请务必注意,此存储过程实际上确实会创建表操作,即 DDL 操作,因此不要在事务中调用它。使用此存储过程需要“创建任何表”权限。
步骤 2:将配置文件中的数据存储在存储表中
使用存储过程将数据存储在刚刚创建的存储表中的配置文件中:
SQL>开始
2DBMS_SQLTUNE。PACK_STGTAB_SQLPROF (
3 profile_name => '%',
4 profile_category => “默认”,
5 staging_table_name => 'PROFILE_STGTAB',
6 staging_schema_owner=> '演示');
7完;
8/
PL/SQL 过程已成功完成。
SQL>设置长10000
SQL>设置长块大小1000
SQL>设置行大小100
SQL>从PROFILE_STGTAB中选择profile_name、类别sql_text;
PROFILE_NAME类别SQL_TEXT
------------------------------ ---------------------------------------------------------------------------------------
my_sql_profile默认选择 /*+no_index(小标签 smalltab_idx1)*/计数(*)
frommalltab,其中table_name = 'TAB$'
profile_name是
需要存储的配置文件的名称(区分大小写),默认为“%”,即此 CATEGORY 下的所有配置文件;profile_category 是需要存储配置文件的类别的名称(区分大小写),默认值为 DEFAULT;staging_table_name 是用于存储配置文件数据的表的名称(区分大小写);staging_schema_owner表所属的架构。调用此函数需要对存储表具有“创建任何 SQL 配置文件系统”权限和“选择”权限。
需要注意的一点是:如果调用此存储过程,将执行 COMMIT,因此请注意对上一个事务的影响。
此外,还可以通过存储过程修改存储表中的信息:
SQL>开始
2DBMS_SQLTUNE。REMAP_STGTAB_SQLPROF (
3 old_profile_name => 'my_sql_profile',
4 new_profile_name => 'new_sql_profile',
5 new_profile_category=> 'DEV',
6 staging_table_name => 'PROFILE_STGTAB',
7 staging_schema_owner=> “演示”);
8完;
9/
PL/SQL 过程已成功完成。
Old_profile_name是存储在存储表中需要修改的配置文件的名称(区分大小写);new_profile_name是需要修改的新名称,默认值为 NULL,并且不修改名称;new_profile_category是需要修改为的新目录名称, 默认情况下为 NULL,不会修改;staging_table_name是需要修改的存储表的名称(区分大小写);staging_schema_owner是存储表所属的架构。
当然,调用此函数需要对存储表具有 UPDATE 权限。
步骤 3:从存储表中导入配置文件数据
将配置文件中的数据导入存储
表,我们可以将存储表中的数据导入到其他数据库中:
SQL>创建表 STGTAB 作为选择 * 从 [url=mailto
ROFILE_STGTAB@EDGAR]PROFILE_STGTAB@EDGAR[/网址];
已创建表。
然后将数据导出为配置文件:
SQL>开始
2DBMS_SQLTUNE。UNPACK_STGTAB_SQLPROF (
3 profile_name => 'new_sql_profile',
4 profile_category => 'DEV',
5 替换 => 假,
6 staging_table_name => 'STGTAB',
7 staging_schema_owner=> “演示”);
8完;
9/
PL/SQL 过程已成功完成。
SQL>从DBA_SQL_PROFILES中选择名称、类别sql_text
阿拉伯数字;
名称类别SQL_TEXT
------------------------------ ------------------------------ ----------------------------------------------------
new_sql_profile DEV 选择 /*+no_index(小标签 smalltab_idx1)*/计数(*)
从小标签,其中 table_name = 'TAB$'
如您所见,配置文件已成功导入。调用此存储过程需要“创建任何 SQL 配置文件系统”权限。参数的含义与上一个函数中的含义相同。
补充:删除存储表中的数据和删除存储表。
事实上,删除存储表
数据和存储表的删除与普通表相同,可以使用 DELETE 和 DROP:
SQL>从STGTAB中删除;
删除了 1 行。
SQL> drop table STGTAB;
表掉落。
三、小结
正如文章开头提到的,这个工具让语句调优变得非常简单,DBA 可以在最短的时间内、以最好的方式给出优化建议,并且有最安全的方式来调试优化结果。
此外,STA 还有一组工具,它们对于在数据仓库环境中进行调试非常有用:SQL 优化集。我们将在以后文章的另一篇文章中介绍它。