最近发现报表系统上有一存储过程越来越慢,在数据库中查询后,发现有以下条SQL

  1. --优化前:耗时>1h
  2. select c.policyno,
  3. c.endorseno,
  4. r.item_code,
  5. sum(r.outstanding_amount - r.settled_amount - r.offset_amount) OS_amount
  6. from c_reserve_list@aclaim r
  7. left join c_claim@aclaim c
  8. on c.claimno = r.claim_no
  9. where r.busi_phase in
  10. (select max(busi_phase)
  11. from rpt_st.c_reserve_list
  12. where claim_no = r.claim_no
  13. and last_modify_date =
  14. (select max(last_modify_date)
  15. from rpt_st.c_reserve_list
  16. where claim_no = r.claim_no
  17. and last_modify_date < to_date(V_ENDDATE, 'yyyymmdd')))
  18. and r.count =
  19. (select max(count)
  20. from rpt_st.c_reserve_list
  21. where claim_no = r.claim_no
  22. and busi_phase = r.busi_phase
  23. and count in
  24. (select
  25. count
  26. from rpt_st.c_reserve_list
  27. where claim_no = r.claim_no
  28. and busi_phase = r.busi_phase
  29. and last_modify_date < to_date(V_ENDDATE, 'yyyymmdd')))
  30. group by c.policyno, c.endorseno, r.item_code;
  31. --执行计划
  32. Plan hash value: 3027187983
  33. -------------------------------------------------------------------------------------------------------------------
  34. | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | Inst |IN-OUT|
  35. -------------------------------------------------------------------------------------------------------------------
  36. | 0 | SELECT STATEMENT | | 22383 | 6251K| | 6751M (1)|999:59:59 | | |
  37. | 1 | HASH GROUP BY | | 22383 | 6251K| 408G| 6751M (1)|999:59:59 | | |
  38. |* 2 | FILTER | | | | | | | | |
  39. |* 3 | HASH JOIN | | 1417M| 377G| 23M| 97M (1)|324:16:14 | | |
  40. |* 4 | HASH JOIN RIGHT OUTER| | 144K| 22M| | 605 (2)| 00:00:08 | | |
  41. | 5 | REMOTE | C_CLAIM | 5527 | 356K| | 153 (1)| 00:00:02 | AUTOC~ | R->S |
  42. | 6 | REMOTE | C_RESERVE_LIST | 144K| 12M| | 450 (2)| 00:00:06 | AUTOC~ | R->S |
  43. | 7 | VIEW | VW_SQ_1 | 1417M| 166G| | 88M (1)|293:20:25 | | |
  44. | 8 | HASH GROUP BY | | 1417M| 248G| 601G| 88M (1)|293:20:25 | | |
  45. |* 9 | HASH JOIN | | 1735M| 303G| 14M| 19266 (88)| 00:03:52 | | |
  46. | 10 | REMOTE | C_RESERVE_LIST | 144K| 12M| | 450 (2)| 00:00:06 | NEWAU~ | R->S |
  47. | 11 | REMOTE | C_RESERVE_LIST | 144K| 12M| | 450 (2)| 00:00:06 | NEWAU~ | R->S |
  48. | 12 | SORT AGGREGATE | | 1 | 61 | | | | | |
  49. |* 13 | FILTER | | | | | | | | |
  50. | 14 | REMOTE | C_RESERVE_LIST | 1 | 61 | | 3 (0)| 00:00:01 | NEWAU~ | R->S |
  51. | 15 | SORT AGGREGATE | | 1 | 51 | | | | | |
  52. | 16 | REMOTE | C_RESERVE_LIST | 32 | 1632 | | 3 (0)| 00:00:01 | NEWAU~ | R->S |
  53. -------------------------------------------------------------------------------------------------------------------
  54. Predicate Information (identified by operation id):
  55. ---------------------------------------------------
  56. 2 - filter("R"."BUSI_PHASE"= (SELECT MAX("BUSI_PHASE") FROM "A1" WHERE "LAST_MODIFY_DATE"= (SELECT
  57. MAX("LAST_MODIFY_DATE") FROM "A1" WHERE "CLAIM_NO"=:B1 AND "LAST_MODIFY_DATE"<TO_DATE(' 2017-06-26
  58. 00:00:00', 'syyyy-mm-dd hh24:mi:ss')) AND "CLAIM_NO"=:B2))
  59. 3 - access("R"."COUNT"="VW_COL_1" AND "CLAIM_NO"="R"."CLAIM_NO" AND "BUSI_PHASE"="R"."BUSI_PHASE" AND
  60. "CLAIM_NO"="R"."CLAIM_NO" AND "BUSI_PHASE"="R"."BUSI_PHASE")
  61. 4 - access("C"."CLAIMNO"(+)="R"."CLAIM_NO")
  62. 9 - access("COUNT"="COUNT")
  63. 13 - filter("LAST_MODIFY_DATE"= (SELECT MAX("LAST_MODIFY_DATE") FROM "A1" WHERE "CLAIM_NO"=:B1 AND
  64. "LAST_MODIFY_DATE"<TO_DATE(' 2017-06-26 00:00:00', 'syyyy-mm-dd hh24:mi:ss')))
  65. Remote SQL Information (identified by operation id):
  66. ----------------------------------------------------
  67. 5 - SELECT "CLAIMNO","POLICYNO","ENDORSENO" FROM "C_CLAIM" "C" (accessing 'aclaim' )
  68. 6 - SELECT "CLAIM_NO","ITEM_CODE","OUTSTANDING_AMOUNT","SETTLED_AMOUNT","OFFSET_AMOUNT","BUSI_PHASE","CO
  69. UNT" FROM "C_RESERVE_LIST" "SYS_ALIAS_2" (accessing 'aclaim' )
  70. 10 - SELECT "CLAIM_NO","LAST_MODIFY_DATE","BUSI_PHASE","COUNT" FROM "aclaim"."C_RESERVE_LIST" "A2"
  71. WHERE "LAST_MODIFY_DATE"<:1 (accessing 'NEWaclaim' )
  72. 11 - SELECT "CLAIM_NO","BUSI_PHASE","COUNT" FROM "aclaim"."C_RESERVE_LIST" "A1" (accessing
  73. 'NEWaclaim' )
  74. 14 - SELECT "CLAIM_NO","LAST_MODIFY_DATE","BUSI_PHASE" FROM "aclaim"."C_RESERVE_LIST" "A1" WHERE
  75. "CLAIM_NO"=:1 (accessing 'NEWaclaim' )
  76. 16 - SELECT "CLAIM_NO","LAST_MODIFY_DATE" FROM "aclaim"."C_RESERVE_LIST" "A1" WHERE "CLAIM_NO"=:1 AND
  77. "LAST_MODIFY_DATE"<:2 (accessing 'NEWaclaim' )

分析

  1. --在以上执行计划中可以看出该SQL,查询的都是远程表。所以可以改写成以下形式,然后在远程库直接执行。
  2. select c.policyno,
  3. c.endorseno,
  4. r.item_code,
  5. sum(r.outstanding_amount - r.settled_amount - r.offset_amount) OS_amount
  6. from aclaim.c_reserve_list r
  7. left join aclaim.c_claim c
  8. on c.claimno = r.claim_no
  9. where r.busi_phase in
  10. (select max(busi_phase)
  11. from aclaim.c_reserve_list
  12. where claim_no = r.claim_no
  13. and last_modify_date =
  14. (select max(last_modify_date)
  15. from aclaim.c_reserve_list
  16. where claim_no = r.claim_no
  17. and last_modify_date < to_date(20170626, 'yyyymmdd')))
  18. and r.count =
  19. (select max(count)
  20. from aclaim.c_reserve_list
  21. where claim_no = r.claim_no
  22. and busi_phase = r.busi_phase
  23. and count in
  24. (select
  25. count
  26. from aclaim.c_reserve_list
  27. where claim_no = r.claim_no
  28. and busi_phase = r.busi_phase
  29. and last_modify_date < to_date(20170626, 'yyyymmdd')))
  30. group by c.policyno, c.endorseno, r.item_code;
  31. --执行计划如下:
  32. Plan hash value: 897376705
  33. ------------------------------------------------------------------------------------------------------
  34. | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
  35. ------------------------------------------------------------------------------------------------------
  36. | 0 | SELECT STATEMENT | | 22383 | 1508K| | 15M (2)| 52:55:06 |
  37. | 1 | HASH GROUP BY | | 22383 | 1508K| 22M| 15M (2)| 52:55:06 |
  38. |* 2 | FILTER | | | | | | |
  39. |* 3 | HASH JOIN RIGHT OUTER | | 144K| 9723K| | 536 (3)| 00:00:07 |
  40. | 4 | VIEW | index$_join$_002 | 5527 | 161K| | 83 (0)| 00:00:02 |
  41. |* 5 | HASH JOIN | | | | | | |
  42. | 6 | INDEX FAST FULL SCAN| IDX_C_CLAIM_03 | 5527 | 161K| | 46 (0)| 00:00:01 |
  43. | 7 | INDEX FAST FULL SCAN| PK_C_CLAIM | 5527 | 161K| | 36 (0)| 00:00:01 |
  44. | 8 | TABLE ACCESS FULL | C_RESERVE_LIST | 144K| 5496K| | 450 (2)| 00:00:06 |
  45. | 9 | SORT AGGREGATE | | 1 | 24 | | | |
  46. |* 10 | FILTER | | | | | | |
  47. |* 11 | TABLE ACCESS FULL | C_RESERVE_LIST | 32 | 768 | | 449 (2)| 00:00:06 |
  48. | 12 | SORT AGGREGATE | | 1 | 21 | | | |
  49. |* 13 | TABLE ACCESS FULL | C_RESERVE_LIST | 32 | 672 | | 449 (2)| 00:00:06 |
  50. | 14 | SORT AGGREGATE | | 1 | 46 | | | |
  51. |* 15 | HASH JOIN | | 3 | 138 | | 901 (3)| 00:00:11 |
  52. |* 16 | TABLE ACCESS FULL| C_RESERVE_LIST | 2 | 54 | | 450 (2)| 00:00:06 |
  53. |* 17 | TABLE ACCESS FULL| C_RESERVE_LIST | 2 | 38 | | 450 (2)| 00:00:06 |
  54. ------------------------------------------------------------------------------------------------------
  55. Predicate Information (identified by operation id):
  56. ---------------------------------------------------
  57. 2 - filter("R"."BUSI_PHASE"= (SELECT MAX("BUSI_PHASE") FROM "aclaim"."C_RESERVE_LIST"
  58. "C_RESERVE_LIST" WHERE "LAST_MODIFY_DATE"= (SELECT MAX("LAST_MODIFY_DATE") FROM
  59. "aclaim"."C_RESERVE_LIST" "C_RESERVE_LIST" WHERE "CLAIM_NO"=:B1 AND
  60. "LAST_MODIFY_DATE"<TO_DATE(' 2017-06-26 00:00:00', 'syyyy-mm-dd hh24:mi:ss')) AND
  61. "CLAIM_NO"=:B2) AND "R"."COUNT"= (SELECT MAX("COUNT") FROM "aclaim"."C_RESERVE_LIST"
  62. "C_RESERVE_LIST","aclaim"."C_RESERVE_LIST" "C_RESERVE_LIST" WHERE "CLAIM_NO"=:B3 AND
  63. "BUSI_PHASE"=:B4 AND "LAST_MODIFY_DATE"<TO_DATE(' 2017-06-26 00:00:00', 'syyyy-mm-dd
  64. hh24:mi:ss') AND "COUNT"="COUNT" AND "CLAIM_NO"=:B5 AND "BUSI_PHASE"=:B6))
  65. 3 - access("C"."CLAIMNO"(+)="R"."CLAIM_NO")
  66. 5 - access(ROWID=ROWID)
  67. 10 - filter("LAST_MODIFY_DATE"= (SELECT MAX("LAST_MODIFY_DATE") FROM
  68. "aclaim"."C_RESERVE_LIST" "C_RESERVE_LIST" WHERE "CLAIM_NO"=:B1 AND
  69. "LAST_MODIFY_DATE"<TO_DATE(' 2017-06-26 00:00:00', 'syyyy-mm-dd hh24:mi:ss')))
  70. 11 - filter("CLAIM_NO"=:B1)
  71. 13 - filter("CLAIM_NO"=:B1 AND "LAST_MODIFY_DATE"<TO_DATE(' 2017-06-26 00:00:00',
  72. 'syyyy-mm-dd hh24:mi:ss'))
  73. 15 - access("COUNT"="COUNT")
  74. 16 - filter("CLAIM_NO"=:B1 AND "BUSI_PHASE"=:B2 AND "LAST_MODIFY_DATE"<TO_DATE(' 2017-06-26
  75. 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
  76. 17 - filter("CLAIM_NO"=:B1 AND "BUSI_PHASE"=:B2)
  77. --执行计划中有filter关键字且有两个子级,一般来说是很耗费性能。
  78. --如果不进行改写,根据自己的经验,最有效的方式就是在执行计划中谓词信息里找出有绑定变量的字段并建立索引。
  79. --所以建立如下索引:
  80. create index IDX_C_RESERVE_LIST_TEST on C_RESERVE_LIST(CLAIM_NO,BUSI_PHASE,LAST_MODIFY_DATE);

执行SQL,10s内能返回全部结果。

但是,在报表库上运行时,发现SQL的性能还是没改善。

再次分析执行计划:

发现此sql运行时,采用多个dblink访问远程库。查看dblink的元数据:

  1. CREATE OR REPLACE SYNONYM "rpt_st"."C_RESERVE_LIST" FOR "aclaim"."C_RESERVE_LIST"@"NEWaclaim";
  2. create public database link aclaim connect to aclaim using 'DOICLC';
  3. create public database link NEWaclaim connect to aclaim using 'DOICLC';

发现两个DBLINK都是访问AUTOCLAIM用户下的表。

这种方式很容易造成sql不能走正确执行计划,所以可以把sql中的dblink改写成同一个。

再次执行,10s内能返回全部结果。

  1. SELECT C.POLICYNO,
  2. C.ENDORSENO,
  3. R.ITEM_CODE,
  4. SUM(R.OUTSTANDING_AMOUNT - R.SETTLED_AMOUNT - R.OFFSET_AMOUNT) OS_AMOUNT
  5. FROM rpt_st.C_RESERVE_LIST R
  6. LEFT JOIN rpt_st.C_CLAIM C
  7. ON C.CLAIMNO = R.CLAIM_NO
  8. WHERE R.BUSI_PHASE IN
  9. (SELECT MAX(BUSI_PHASE)
  10. FROM rpt_st.C_RESERVE_LIST
  11. WHERE CLAIM_NO = R.CLAIM_NO
  12. AND LAST_MODIFY_DATE =
  13. (SELECT MAX(LAST_MODIFY_DATE)
  14. FROM rpt_st.C_RESERVE_LIST
  15. WHERE CLAIM_NO = R.CLAIM_NO
  16. AND LAST_MODIFY_DATE < TO_DATE('20170626', 'yyyymmdd')))
  17. AND R.COUNT =
  18. (SELECT MAX(COUNT)
  19. FROM rpt_st.C_RESERVE_LIST
  20. WHERE CLAIM_NO = R.CLAIM_NO
  21. AND BUSI_PHASE = R.BUSI_PHASE
  22. AND COUNT IN
  23. (SELECT COUNT
  24. FROM rpt_st.C_RESERVE_LIST
  25. WHERE CLAIM_NO = R.CLAIM_NO
  26. AND BUSI_PHASE = R.BUSI_PHASE
  27. AND LAST_MODIFY_DATE < TO_DATE('20170626', 'yyyymmdd')))
  28. GROUP BY C.POLICYNO, C.ENDORSENO, R.ITEM_CODE
  29. Plan hash value: 2524269579
  30. -------------------------------------------------------------------------------------------------------------------------------
  31. | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | Inst |
  32. -------------------------------------------------------------------------------------------------------------------------------
  33. | 0 | SELECT STATEMENT REMOTE | | 22383 | 1508K| | 109K (1)| 00:21:55 | |
  34. | 1 | HASH GROUP BY | | 22383 | 1508K| 22M| 109K (1)| 00:21:55 | |
  35. |* 2 | FILTER | | | | | | | |
  36. |* 3 | HASH JOIN RIGHT OUTER | | 144K| 9723K| | 536 (3)| 00:00:07 | |
  37. | 4 | VIEW | index$_join$_002 | 5527 | 161K| | 83 (0)| 00:00:02 | DOICLC |
  38. |* 5 | HASH JOIN | | | | | | | |
  39. | 6 | INDEX FAST FULL SCAN | IDX_C_CLAIM_03 | 5527 | 161K| | 46 (0)| 00:00:01 | DOICLC |
  40. | 7 | INDEX FAST FULL SCAN | PK_C_CLAIM | 5527 | 161K| | 36 (0)| 00:00:01 | DOICLC |
  41. | 8 | TABLE ACCESS FULL | C_RESERVE_LIST | 144K| 5496K| | 450 (2)| 00:00:06 | DOICLC |
  42. | 9 | SORT AGGREGATE | | 1 | 24 | | | | |
  43. | 10 | FIRST ROW | | 1 | 24 | | 3 (0)| 00:00:01 | |
  44. |* 11 | INDEX RANGE SCAN (MIN/MAX) | IDX_C_RESERVE_LIST_TEST | 1 | 24 | | 3 (0)| 00:00:01 | DOICLC |
  45. | 12 | SORT AGGREGATE | | 1 | 21 | | | | |
  46. |* 13 | INDEX RANGE SCAN | IDX_C_RESERVE_LIST_TEST | 32 | 672 | | 3 (0)| 00:00:01 | DOICLC |
  47. | 14 | SORT AGGREGATE | | 1 | 46 | | | | |
  48. |* 15 | HASH JOIN | | 3 | 138 | | 9 (12)| 00:00:01 | |
  49. | 16 | TABLE ACCESS BY INDEX ROWID| C_RESERVE_LIST | 2 | 54 | | 4 (0)| 00:00:01 | DOICLC |
  50. |* 17 | INDEX RANGE SCAN | IDX_C_RESERVE_LIST_TEST | 2 | | | 3 (0)| 00:00:01 | DOICLC |
  51. | 18 | TABLE ACCESS BY INDEX ROWID| C_RESERVE_LIST | 2 | 38 | | 4 (0)| 00:00:01 | DOICLC |
  52. |* 19 | INDEX RANGE SCAN | IDX_C_RESERVE_LIST_TEST | 2 | | | 3 (0)| 00:00:01 | DOICLC |
  53. -------------------------------------------------------------------------------------------------------------------------------
  54. Predicate Information (identified by operation id):
  55. ---------------------------------------------------
  56. 2 - filter("A2"."BUSI_PHASE"= (SELECT MAX("A4"."BUSI_PHASE") FROM "aclaim"."C_RESERVE_LIST" "A4" WHERE
  57. "A4"."CLAIM_NO"=:B1 AND "A4"."LAST_MODIFY_DATE"= (SELECT MAX("A5"."LAST_MODIFY_DATE") FROM
  58. "aclaim"."C_RESERVE_LIST" "A5" WHERE "A5"."CLAIM_NO"=:B2 AND "A5"."LAST_MODIFY_DATE"<TO_DATE(' 2017-06-26
  59. 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))) AND "A2"."COUNT"= (SELECT MAX("A3"."COUNT") FROM "aclaim"."C_RESERVE_LIST"
  60. "A3","aclaim"."C_RESERVE_LIST" "A6" WHERE "A6"."LAST_MODIFY_DATE"<TO_DATE(' 2017-06-26 00:00:00', 'syyyy-mm-dd
  61. hh24:mi:ss') AND "A6"."BUSI_PHASE"=:B3 AND "A6"."CLAIM_NO"=:B4 AND "A3"."BUSI_PHASE"=:B5 AND "A3"."CLAIM_NO"=:B6 AND
  62. "A3"."COUNT"="A6"."COUNT"))
  63. 3 - access("A1"."CLAIMNO"(+)="A2"."CLAIM_NO")
  64. 5 - access(ROWID=ROWID)
  65. 11 - access("A4"."CLAIM_NO"=:B1)
  66. filter("A4"."LAST_MODIFY_DATE"= (SELECT MAX("A5"."LAST_MODIFY_DATE") FROM "aclaim"."C_RESERVE_LIST" "A5"
  67. WHERE "A5"."CLAIM_NO"=:B1 AND "A5"."LAST_MODIFY_DATE"<TO_DATE(' 2017-06-26 00:00:00', 'syyyy-mm-dd hh24:mi:ss')))
  68. 13 - access("A5"."CLAIM_NO"=:B1 AND "A5"."LAST_MODIFY_DATE"<TO_DATE(' 2017-06-26 00:00:00', 'syyyy-mm-dd
  69. hh24:mi:ss'))
  70. filter("A5"."LAST_MODIFY_DATE"<TO_DATE(' 2017-06-26 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
  71. 15 - access("A3"."COUNT"="A6"."COUNT")
  72. 17 - access("A6"."CLAIM_NO"=:B1 AND "A6"."BUSI_PHASE"=:B2 AND "A6"."LAST_MODIFY_DATE"<TO_DATE(' 2017-06-26
  73. 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
  74. 19 - access("A3"."CLAIM_NO"=:B1 AND "A3"."BUSI_PHASE"=:B2)
  75. Note
  76. -----
  77. - fully remote statement

DBLINK引起的SQL性能问题的更多相关文章

  1. SQL性能优化常见措施(Lock wait timeout exceeded)

    SQL性能优化常见措施 目 录 1.mysql中explain命令使用 2.mysql中mysqldumpslow的使用 3.mysql中修改my.ini配置文件记录日志 4.mysql中如何加索引 ...

  2. SQL性能优化案例分析

    这段时间做一个SQL性能优化的案例分析, 整理了一下过往的案例,发现一个比较有意思的,拿出来给大家分享. 这个项目是我在项目开展2期的时候才加入的, 之前一期是个金融内部信息门户, 里面有个功能是收集 ...

  3. SQL性能优化:如何定位网络性能问题

    一同事跟我反馈他遇到了一个SQL性能问题,他说全表只有69条记录,客户端执行耗费了两分多钟,这不科学呀.要我分析一下原因并解决.我按照类似表结构,构造了一个案例,测试截图如下所示 这个表有13800K ...

  4. SQL性能优化

    引言: 以前在面试的过程中,总有面试官问道:你做过sql性能优化吗?对此,我的答复是没有.一次没有不是自己的错误,两次也不是,但如果是多次呢?今天痛下决心,把有关sql性能优化的相关知识总结一下,以便 ...

  5. Oracle 数据库SQL性能查看

    作为一个开发/测试人员,或多或少都得和数据库打交道,而对数据库的操作归根到底都是SQL语句,所有操作到最后都是操作数据,那么对sql性能的掌控又成了我们工作中一件非常重要的工作.下面简单介绍下一些查看 ...

  6. 如何进行正确的SQL性能优化

    在SQL查询中,为了提高查询的效率,我们常常采取一些措施对查询语句进行SQL性能优化.本文我们总结了一些优化措施,接下来我们就一一介绍. 1.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE ...

  7. 使用show profiles分析SQL性能

    如何查看执行SQL的耗时 使用show profiles分析sql性能. Show profiles是5.0.37之后添加的,要想使用此功能,要确保版本在5.0.37之后. 查看数据库版本 mysql ...

  8. Oracle DB SQL 性能分析器

    • 确定使用SQL 性能分析器的优点 • 描述SQL 性能分析器工作流阶段 • 使用SQL 性能分析器确定数据库更改所带来的性能改进 SQL 性能分析器:概览 • 11g 的新增功能 • 目标用户:D ...

  9. SQL Select count(*)和Count(1)的区别和执行方式及SQL性能优化

    SQL性能优化:http://www.cnblogs.com/CareySon/category/360333.html Select count(*)和Count(1)的区别和执行方式 在SQL S ...

随机推荐

  1. 一道简单的 Java 笔试题,但值得很多人反思!

    前言 面试别人,对我来说是一件新奇事,以前都是别人面试我.我清楚地知道,我在的地域与公司,难以吸引到中国的一流软件人才.所以,我特地调低了期望,很少问什么深入的技术问题,只问一些广泛的.基础的.我只要 ...

  2. 6.while循环正向反向打印一句话

    message = "伤情最是晚凉天,憔悴厮人不堪言."' count=0 num=-1 while count<len(message): print(message[co ...

  3. Docker镜像文件操作

    1什么是Docker镜像 Docker镜像是由文件系统叠加而成(是一种文件的存储形式).最底端是一个文件引导系统,即bootfs,这很像典型的Linux/Unix的引导文件系统.Docker用户几乎永 ...

  4. locale localedef --之Linux字符集理解

    参考: https://www.cnblogs.com/dolphi/p/3622420.html     http://www.360doc.com/content/15/1105/08/14513 ...

  5. Win7执行应用报CLR20r3错误处理记录

    Windows7环境下运行应用报"CLR20r3"错误,错误信息如下: 问题详细信息: 问题签名: 问题事件名称: CLR20r3 问题签名 : qbbtools.exe 问题签名 ...

  6. python中函数参数

    默认参数注意点 优点:灵活,当没有指定与形参对应的实参时就会使用默认参数 缺陷: 例子: >>> def h(m, l=[]):                    #默认参数时列 ...

  7. pip 安装管理失败解决

    问题: pip install ansible 错误: src/hash_template.c:361: warning: implicit declaration of function ‘Py_F ...

  8. [ Luogu 3709 ] 大爷的字符串题

    \(\\\) Description 原题题面太过混乱出题人语文凉凉 给出一个长为 \(n\) 的数列 \(A\) ,多次询问: 对于一个区间 \([L_i,R_i]\),把区间内的所有数最少划分成多 ...

  9. OCP 11g 第四章练习

    练习 4-1 配置Oracle Net 在本练习中, 将使用图形化工具和命令行工具来建立一个完整的Oracle Net 环境. 由此, 读者可看出在Windows 和 Linux 系统中的区别. 1. ...

  10. laravel权限控制Gate

    实现思想 注册 位置: app/Providers/AuthServiceProvider.php $permissions = \App\AdminPermission::all(); foreac ...