精华内容
下载资源
问答
  • 相信很多SQL Server DBA或开发人员在重建或重组大表索引时,都会相当郁闷,不知道...查看这些索引维护操作的进度、预估时间对于我们有较大的意义,需要根据这个做一些决策。下面我们来看看看看如何获取CREATE INDEX...

    相信很多SQL Server DBA或开发人员在重建或重组大表索引时,都会相当郁闷,不知道索引重建的进度,这个对于DBA完全是一个黑盒子,对于系统负载非常大的系统或维护窗口较短的系统,你会遇到一些挑战。例如,你创建索引的时候,很多会话被阻塞,你只能取消创建索引的任务。查看这些索引维护操作的进度、预估时间对于我们有较大的意义,需要根据这个做一些决策。下面我们来看看看看如何获取CREATE INDEX、ALTER INDEX REBUILD、ALTER INDEX ORGANIZE的进度。

    索引重组

    从SQL Server 2008开始,有个DMV视图sys.dm_exec_requests,里面有个字段percent_complete表示以下命令完成的工作的百分比,这里面就包括索引重组(ALTER INDEX REORGANIZE),这其中不包括ALTER INDEX REBUILD,可以查看索引重组(ALTER INDEX ORGANIZE)完成的百分比。也就是说在SQL Server 2008之前是无法获取索引重组的进度情况的。

    percent_complete real Percentage of work completed for the following commands:

    ALTER INDEX REORGANIZE

    AUTO_SHRINK option with ALTER DATABASE

    BACKUP DATABASE

    DBCC CHECKDB

    DBCC CHECKFILEGROUP

    DBCC CHECKTABLE

    DBCC INDEXDEFRAG

    DBCC SHRINKDATABASE

    DBCC SHRINKFILE

    RECOVERY

    RESTORE DATABASE

    ROLLBACK

    TDE ENCRYPTION

    Is not nullable.

    测试环境:SQL Server 2008、2017 RTM CU13

    SELECT  er.session_id ,er.blocking_session_id ,er.status ,er.command ,DB_NAME(er.database_id) DB_name ,er.wait_type ,et.text SQLText ,er.percent_completeFROM    sys.dm_exec_requests erCROSS APPLY sys.dm_exec_sql_text(er.sql_handle) etWHERE   er.session_id = 57AND er.session_id <> @@SPID;

    4ab5bd5248784b5a4a92582ae81723d9.png

    索引重建

    上面DMV视图sys.dm_exec_requests是否也可以查看索引重建的进度呢?答案是不行,测试发现percent_complete这个进度一直为0,那么要如何查看索引重建(INDEX REBUILD)的进度呢?

    不过自SQL Server 2014开始,SQL Server提供了一个新特性:sys.dm_exec_query_profiles,它可以实时监控正在执行的查询的进度情况(Monitors real time query progress while the query is in execution)。当然,需要启用实时查询监控才行。一般只需启用会话级别的实时查询监控,可以通过启用SET STATISTICS XML ON;或SET STATISTICS PROFILE ON;开启。而从SQL Server 2016 (13.x)SP1开始,您可以或者开启跟踪标志7412或使用query_thread_profile扩展的事件。下面是官方文档的描述:

    In SQL Server 2014 (12.x) SP2 and later use SET STATISTICS PROFILE ON or SET STATISTICS XML ON together with the query under investigation. This enables the profiling infrastructure and produces results in the DMV for the session where the SET command was executed. If you are investigating a query running from an application and cannot enable SET options with it, you can create an Extended Event using the query_post_execution_showplan event which will turn on the profiling infrastructure.

    In SQL Server 2016 (13.x) SP1, you can either turn ontrace flag 7412or use the query_thread_profile extended event.

    --Configure query for profiling with sys.dm_exec_query_profiles

    SET STATISTICS PROFILE ON;

    GO

    --Or enable query profiling globally under SQL Server 2016 SP1 or above

    DBCC TRACEON (7412, -1);

    GO

    ALTERINDEXYour_Index_NameONYour_Table_NameREBUILD;

    GO

    DECLARE @SPID INT = 53;;WITH agg AS(SELECT SUM(qp.[row_count]) AS [RowsProcessed],SUM(qp.[estimate_row_count]) AS [TotalRows],MAX(qp.last_active_time) - MIN(qp.first_active_time) AS [ElapsedMS],MAX(IIF(qp.[close_time] = 0 AND qp.[first_row_time] > 0,[physical_operator_name],N'')) AS [CurrentStep]FROM sys.dm_exec_query_profiles qpWHERE qp.[physical_operator_name] IN (N'Table Scan', N'Clustered Index Scan', N'Sort' , N'Index Scan')AND   qp.[session_id] = @SPID), comp AS(SELECT *,([TotalRows] - [RowsProcessed]) AS [RowsLeft],([ElapsedMS] / 1000.0) AS [ElapsedSeconds]FROM   agg)SELECT [CurrentStep],[TotalRows],[RowsProcessed],[RowsLeft],CONVERT(DECIMAL(5, 2),(([RowsProcessed] * 1.0) / [TotalRows]) * 100) AS [PercentComplete],[ElapsedSeconds],(([ElapsedSeconds] / [RowsProcessed]) * [RowsLeft]) AS [EstimatedSecondsLeft],DATEADD(SECOND,(([ElapsedSeconds] / [RowsProcessed]) * [RowsLeft]),GETDATE()) AS [EstimatedCompletionTime]FROM   comp;

    242c80c08c4c084d64eebc874dcd73c8.png

    注意事项:在SQL Server 2016 SP1之前,如果要使用sys.dm_exec_query_profiles查看索引重建的进度,那么就必须在索引重建之前设置SET STATISTICS PROFILE ON or SET STATISTICS XML ON。 而自

    SQL Server 2016 SP1之后,可以使用DBCC TRACEON (7412, -1);开启全局会话的跟踪标记,或者开启某个会话的跟踪标记,当然如果要使用sys.dm_exec_query_profiles查看索引重建的进度,也必须开启7412跟踪标记

    ,然后重建索引,否则也没有值。

    注意事项::索引重组时,sys.dm_exec_query_profiles中没有数据。所以sys.dm_exec_query_profiles不能用来查看索引重组的进度。

    新建索引

    新建索引进度的查询,也可以使用下面SQL语句。这里不做展开。

    DECLARE @SPID INT = 56;;WITH agg AS(SELECT SUM(qp.[row_count]) AS [RowsProcessed],SUM(qp.[estimate_row_count]) AS [TotalRows],MAX(qp.last_active_time) - MIN(qp.first_active_time) AS [ElapsedMS],MAX(IIF(qp.[close_time] = 0 AND qp.[first_row_time] > 0,[physical_operator_name],N'')) AS [CurrentStep]FROM sys.dm_exec_query_profiles qpWHERE qp.[physical_operator_name] IN (N'Table Scan', N'Clustered Index Scan', N'Sort' , N'Index Scan')ANDqp.[session_id] = @SPID), comp AS(SELECT *,([TotalRows] - [RowsProcessed]) AS [RowsLeft],([ElapsedMS] / 1000.0) AS [ElapsedSeconds]FROM   agg)SELECT [CurrentStep],[TotalRows],[RowsProcessed],[RowsLeft],CONVERT(DECIMAL(5, 2),(([RowsProcessed] * 1.0) / [TotalRows]) * 100) AS [PercentComplete],[ElapsedSeconds],(([ElapsedSeconds] / [RowsProcessed]) * [RowsLeft]) AS [EstimatedSecondsLeft],DATEADD(SECOND,(([ElapsedSeconds] / [RowsProcessed]) * [RowsLeft]),GETDATE()) AS [EstimatedCompletionTime]FROM   comp;SELECTnode_id,physical_operator_name,SUM(row_count) row_count,SUM(estimate_row_count) AS estimate_row_count,CAST(SUM(row_count)*100 AS float)/SUM(estimate_row_count)  as estimate_percent_completeFROM sys.dm_exec_query_profilesWHERE session_id=@SPIDGROUP BY node_id,physical_operator_nameORDER BY node_id desc;

    参考资料:

    https://docs.microsoft.com/zh-cn/sql/relational-databases/system-dynamic-management-views/sys-dm-exec-query-profiles-transact-sql?view=sql-server-2017

    https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-exec-requests-transact-sql?view=sql-server-2017

    https://dba.stackexchange.com/questions/139191/sql-server-how-to-track-progress-of-create-index-command

    https://support.microsoft.com/zh-cn/help/4053291/fix-sys-dm-exec-query-profiles-dmv-returns-wrong-estimate-row-count-in

    https://blogs.msdn.microsoft.com/sql_pfe_blog/2016/12/22/create-index-monitoring-progress/

    展开全文
  • mysql 查看索引使用情况这是以读为主的线上库root@read 02:28:07>show status like ‘Handler_read%’;+———————–+——-+| Variable_name | Value |+———————–+——-+| Handler_read_first | 0 || ...

    mysql 查看索引使用情况

    这是以读为主的线上库

    root@read 02:28:07>show status like ‘Handler_read%’;

    +———————–+——-+

    | Variable_name         | Value |

    +———————–+——-+

    | Handler_read_first    | 0     |

    | Handler_read_key      | 0     |

    | Handler_read_next     | 0     |

    | Handler_read_prev     | 0     |

    | Handler_read_rnd      | 0     |

    | Handler_read_rnd_next | 61    |

    +———————–+——-+

    6 rows in set (0.41 sec)

    Handler_read_first 代表读取索引头的次数,如果这个值很高,说明全索引扫描很多。

    Handler_read_key代表一个索引被使用的次数,如果我们新增加一个索引,可以查看Handler_read_key是否有增加,如果有增加,说明sql用到索引。

    Handler_read_next 代表读取索引的下列,一般发生range scan。

    Handler_read_prev 代表读取索引的上列,一般发生在ORDER BY … DESC。

    Handler_read_rnd 代表在固定位置读取行,如果这个值很高,说明对大量结果集进行了排序、进行了全表扫描、关联查询没有用到合适的KEY。

    Handler_read_rnd_next 代表进行了很多表扫描,查询性能低下。

    相关文档:

    对于针对字符串位置的操作,第一个位置被标记为1。

    ASCII(str) 返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果str是NULL,返回NULL。

    mysql> select ASCII('2');

    -> 50

    mysql> select ASCII(2);

    -> 50

    mysql> select ASCII('dx');

    -> 100

    也 ......

    MySQL 5.1.40已经发布,在这里有一些新的特性出现,包括MySQL基群基于磁盘的数据支持等等。  MySQL 5.1.40已经发布,这一版本的MySQL有很多新的功能特性,希望这些新特性能让大家今后的工作更有效率。MySQL是现在最流行一个多线程的,结构化查询语言(SQL)数据库服务器.绝大多数PHP网站的数据库后台都是采用这一数据库.

    ......

    从http://hackmysql.com/mysqlsla下载mysqlsla,当前最新版为:2.03

    tar zxvf mysqlsla-2.03.tar.gz

    cp mysqlsla-2.03/bin/mysqlsla /usr/local/bin

    如果提示“Can’t locate DBI.pm”,执行以下命令

    yum install perl-DBI perl-DBD-MySQL -y

    这时就可以使用mysqlsla了,用法如下

    mysqlsla -lt slo ......

    作者:叶金荣(Email: imysql#gmail.com),来源:http://iMySQL.cn,转载请注明作者和出处,并且不能用于商业用途,违者必究。

    MySQL提供了数据库的同步功能,这对我们实现数据库的冗灾、备份、恢复、负载均衡等都是有极大帮助的。本文描述了常见的同步设置方法。

    一、准备服务器

    由于MySQL不同版本之间的(二进制日志)b ......

    展开全文
  • innodb和myisam只支持btree索引,而memory和heap存储引擎可以支持hash和btree索引我们可以通过下面语句查询当前索引使用情况:show status like '%Handler_read%';+-----------------------+-------+| Variable_name...

    mysql中支持hash和btree索引。innodb和myisam只支持btree索引,而memory和heap存储引擎可以支持hash和btree索引

    我们可以通过下面语句查询当前索引使用情况:

    show status like '%Handler_read%';

    +-----------------------+-------+

    | Variable_name | Value |

    +-----------------------+-------+

    | Handler_read_first | 0 |

    | Handler_read_key | 0 |

    | Handler_read_last | 0 |

    | Handler_read_next | 0 |

    | Handler_read_prev | 0 |

    | Handler_read_rnd | 0 |

    | Handler_read_rnd_next | 0 |

    +-----------------------+-------+

    如果索引正在工作,则Handler_read_key的值会很高,这个值代表一个行被索引值读的次数,很低值表名增加索引得到的性能改善不高,因此索引并不经常使用

    如果Handler_read_rnd_next值很高意味着查询运行效率很低,应该建立索引补救,这个值含义是在数据文件中读取下一行的请求数。如果正在进行大量表扫描,Handler_read_rnd_next的数值将会很高。说明索引不正确或者没有利用索引。

    优化:

    优化insert语句:

    1.尽量采用 insert into test values(),(),(),()...

    2.如果从不同客户插入多行,能通过使用insert delayed语句得到更高的速度,delayed含义是让insert语句马上执行,其实数据都被放在内存队列中个,并没有真正写入磁盘,这比每条语句分别插入快的多;low_priority刚好相反,在所有其他用户对表的读写完后才进行插入。

    3.将索引文件和数据文件分在不同磁盘上存放(利用建表语句)

    4.如果进行批量插入,可以增加bulk_insert_buffer_size变量值方法来提高速度,但是只对MyISAM表使用

    5.当从一个文本文件装载一个表时,使用load data file,通常比使用insert快20倍

    优化group by语句:

    默认情况下,mysql会对所有group by字段进行排序,这与order by类似。如果查询包括group by但用户想要避免排序结果的消耗,则可以指定order by null禁止排序。

    优化order by语句:

    某些情况下,mysql可以使用一个索引满足order by字句,因而不需要额外的排序。where条件和order by使用相同的索引,并且order by的顺序和索引的顺序相同,并且order by的字段都是升序或者降序。

    6f965d93e0906e13f3ec2554f93b51eb.png

    优化嵌套查询:

    mysql4.1开始支持子查询,但是某些情况下,子查询可以被更有效率的join替代,尤其是join的被动表待带有索引的时候,原因是mysql不需要再内存中创建临时表来完成这个逻辑上需要两个步骤的查询工作。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

    本文标题: MySql如何查看索引并实现优化

    本文地址: http://www.cppcns.com/shujuku/mysql/368728.html

    展开全文
  • mysql查看索引使用情况的方法发布时间:2020-09-08 09:39:30来源:亿速云阅读:61作者:小新小编给大家分享一下mysql查看索引使用情况的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!...

    mysql查看索引使用情况的方法

    发布时间:2020-09-08 09:39:30

    来源:亿速云

    阅读:61

    作者:小新

    小编给大家分享一下mysql查看索引使用情况的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!

    mysql中支持hash和btree索引。innodb和myisam只支持btree索引,而memory和heap存储引擎可以支持hash和btree索引。

    我们可以通过下面语句查询当前索引使用情况:show status like '%Handler_read%';

    +-----------------------+-------+

    | Variable_name | Value |

    +-----------------------+-------+

    | Handler_read_first | 0 |

    | Handler_read_key | 0 |

    | Handler_read_last | 0 |

    | Handler_read_next | 0 |

    | Handler_read_prev | 0 |

    | Handler_read_rnd | 0 |

    | Handler_read_rnd_next | 0 |

    +-----------------------+-------+

    如果索引正在工作,则Handler_read_key的值会很高,这个值代表一个行被索引值读的次数,很低值表名增加索引得到的性能改善不高,因此索引并不经常使用。

    如果Handler_read_rnd_next值很高意味着查询运行效率很低,应该建立索引补救,这个值含义是在数据文件中读取下一行的请求数。如果正在进行大量表扫描,Handler_read_rnd_next的数值将会很高。说明索引不正确或者没有利用索引。

    看完了这篇文章,相信你对mysql查看索引使用情况的方法有了一定的了解,想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

    展开全文
  • 1.查看表空间使用情况:select sum(bytes)/(1024*1024) as free_space,tablespace_name from dba_free_spacegroup by tablespace_name;SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,(B.BYTES...
  • 包括Oracle的存储管理、对象管理、内存和... 本回答由网友推Oracle 表空间索引存储和碎片检查.doc993x1404 - 89KB - PNGOracle索引以及索引碎片705x371 - 201KB - PNGoracle 索引碎片整理 SQLServer2005索引碎片400...
  • Oracle 查看索引表空间

    2021-05-02 01:47:11
    引用摘要: Oracle 查看索引表空间,Oracle 查看索引表空间语句,包括查看表空间的使用情况、查看数据库库对象、查看数据库的版本、查看数据库创建日期和归档方式、查询数据库中索引占用表空间的大小。 Oracle 查看...
  • mysql查看索引方法

    2021-02-02 15:45:06
    查看mysql索引:复制代码 代码示例:mysql> show index from tblname;mysql> show keys from tblname;mysql索引输出结果分析:· Table表的名称。· Non_unique如果索引不能包括重复词,则为0。如果可以,则为1...
  • 视图—–是由SELECT查询语句(可以是单表或者多表... 视图是查看和操纵基表数据的一种方法, 可以像使用表一样使用视图.索引目标是为了提高查询的速度,当用户对查询速度不满意而需要对数据库的性能进行调校时,优先考...
  • 查看目标表中已添加的索引 –在数据库中查找表名 select * from user_tables where table_name like ‘tablename%’; –查看该表的所有索引 select * from all_indexes where table_name = ‘tablen
  • mysql中支持hash和btree索引。innodb和myisam只支持btree索引,而memory和heap存储引擎可以支持hash和btree索引。我们可以通过下面语句查询当前索引使用情况:showstatuslike'%Handler_read%';+--------------------...
  • Oracle下查看索引的语句

    万次阅读 2021-12-13 18:30:21
    1. 查询一张表里面索引 select * from user_indexes where table_name=upper('表名'); 2. 查询被索引字段 select * from user_ind_columns where index_name=('索引名称'); 3. 给某一字段创建索引 create ...
  • mysql中查看索引占用的存储空间使用下面的sql语句:select table_name,concat(truncate(data_length/1024/1024,2),'MB') as data_size,concat(truncate(index_length/1024/1024,2),'MB') as index_sizefrom ...
  • Elasticsearch查看索引结构

    千次阅读 2021-11-01 20:17:48
    1工具 postman 2 请求方法 Get 3 URL Elasticsearch地址/索引名称
  • es中的文档等价于java中的对象,那么在java中有字段(比如string, int, long等类型), 同理在es索引中的具体字段也是有类型的.PUT /testDocument/article/1{"title" : "elasticsearchshi是是什么","author" : "zhangsan...
  • 查看索引使用情况: explain select col_name from tbl_name where xxx; -- 如果查询使用到了索引,会出现: `Index Scan using idx_name on tbl_name ` -- 如果查询使用到覆盖索引,会出现: `Index Only Scan ...
  • 查看表中有哪些已建立的索引SHOW INDEX FROM tbl_name [FROM db_name]SHOW INDEX会返回以下字段:| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | ...
  • 索引语法 索引在创建表的时候,可以同时创建,也可以随时增加新的索引。 准备环境: 创建索引 查看索引 删除索引 ALTER命令
  • MySQL 查看索引命令

    2021-01-30 05:50:43
    查看命令:1,show index from tblname;2,show keys from tblname;mysql> show index from qw_zoetis_donate\G;*************************** 1. row ***************************Table: qw_zoetis_donateNon_...
  • 如何查看MySQL索引

    2021-01-18 18:25:33
    # 通过 show index 方法,查看索引的基数mysql> show index from t;+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------...
  • 一、索引创建方式 前台方式 缺省情况下,当为一个集合创建索引时,这个操作将阻塞其他的所有操作。即该集合上的无法正常读写,直到索引创建完毕 任意基于所有数据库申请读或写锁都将等待直到前台完成索引创建操作 ...
  • # 通过 show index 方法,查看索引的基数mysql> show index from t;+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------...
  • 查看mysql索引情况

    2021-01-28 04:28:24
    查看mysql索引情况mysql> show index from tblname;mysql> show keys from tblname;· Table表的名称。· Non_unique如果索引不能包括重复词,则为0。如果可以,则为1。· Key_name索引的名称。· Seq_in_...
  • 本文实例讲述了MySQL查看、创建和删除索引的方法。分享给大家供大家参考。具体如下:1.索引作用在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率。特别是当数据量...
  • phoenix索引

    2021-02-22 15:38:19
    而Phoenix支持除rowkey外的其它字段的索引创建,即二级索引,查询效率可大幅提升。 为什么需要用二级索引? 对于HBase而言,如果想精确地定位到某行记录,唯一的办法是通过rowkey来查询。如果
  • 1.索引作用在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率。特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍。例如,有3个未...
  • 查看表中指定索引的高度:索引层数的表示法: 索引中每个页的结构图: page Header中有个page level的值,这个值保存这个B+树的高度值,由于B+树从0开始算,所以B+树的高度=page level的值再加1由于B+树中是从root页...
  • 查看oracle中表的索引

    千次阅读 2021-05-08 07:19:15
    oracle中表的索引信息存在user_indexes 和user_ind_columns 两张表里面,其中,user_indexes 系统视图存放是索引的名称以及该索引是否是唯一索引等信息,user_ind_columns统视图存放的是索引名称,对应的表和列等sql...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 655,448
精华内容 262,179
关键字:

查看索引