精华内容
下载资源
问答
  • 所以它提供了一个参数可以让我们可以来禁用它,disable就是来决定是否启用,我们根据环境来判断,环境是什么,提供个关键字给你<code>node process</code>, <pre><code> new ...
  • oracle_慢SQL的优化过程(awr报表)

    千次阅读 2017-11-27 11:34:57
     怎么判断系统运行慢...[root@alimysql03 ~]# top #top查看cup的资源和内存利用率,磁盘io等问题:主要看%CPU,MEM,WA等参数,按1可以查看 CPU的信息。 top - 09:55:39 up 41 days, 1 min, 2 users, 
    

    怎么样判断系统运行慢,或者SQL运行慢原因以及解决办法?
    第一步:判断哪个应用进程消耗资源
    查看CPU的信息:
    [root@alimysql03 ~]# top     #top查看cup的资源和内存利用率,磁盘io等问题:主要看%CPU,MEM,WA等参数,按1可以查看多
    个CPU的信息。
    top - 09:55:39 up 41 days, 1 min,  2 users,  load average: 0.02, 0.04, 0.05
    Tasks: 144 total,   2 running, 141 sleeping,   1 stopped,   0 zombie
    %Cpu0  :  1.0 us,  0.3 sy,  0.0 ni, 98.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu1  :  1.0 us,  0.0 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem :  8011076 total,  1588524 free,  2358156 used,  4064396 buff/cache
    KiB Swap:  8388604 total,  7984112 free,   404492 used.  2923288 avail Mem

      PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                          
    18979 oracle    -2   0 2845172  17540  14412 S   98.7  0.2 134:43.63 oracle                                                                  
    16154 mysql     20   0 10.144g 763720   5924 S   2.0  9.5 658:07.26 mysqld 
    查看io的信息:
    iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信
    息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息
    [root@alimysql03 ~]# iostat -d  -k 3
    参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;2表示,数据显示每隔2秒刷新一次。
    Linux 3.10.0-514.el7.x86_64 (alimysql03)  2017年11月27日  _x86_64_ (2 CPU)

    Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
    sda               0.61         3.19        18.31   11304036   64868149
    sdb               0.11         2.02         7.11    7175028   25182752
    dm-0              0.74         5.20        25.30   18442140   89639957
    dm-1              0.03         0.00         0.12       7144     408740
    tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。"一次传输"意
    思是"一次I/O请求"。多个逻辑请求可能会被合并为"一次I/O请求"。"一次传输"请求的大小是未知的。
    kB_read/s:每秒从设备(drive expressed)读取的数据量;
    kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
    kB_read:读取的总数据量;
    kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。

    [root@alimysql03 ~]# iostat -d -x  -m 3
    Linux 3.10.0-514.el7.x86_64 (alimysql03)  2017年11月27日  _x86_64_ (2 CPU)

    Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
    sda               0.00     0.04    0.12    0.49     0.00     0.02    70.88     0.01   19.17   11.84   20.99   0.76   0.05
    sdb               0.00     0.01    0.05    0.07     0.00     0.01   164.19     0.00   30.40   11.76   43.43   0.51   0.01
    dm-0              0.00     0.00    0.17    0.58     0.01     0.02    81.99     0.02   23.02   11.88   26.20   0.68   0.05
    dm-1              0.00     0.00    0.00    0.03     0.00     0.00     8.01     0.00   14.99    5.87   15.13   0.04   0.00
    rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取
    请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。

    rsec/s:每秒读取的扇区数;
    wsec/:每秒写入的扇区数。
    rKB/s:The number of read requests that were issued to the device per second;
    wKB/s:The number of write requests that were issued to the device per second;
    avgrq-sz 平均请求扇区的大小
    avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。   
    await:  每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果
              大于10ms就比较大了。
             这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越
             大,队列时间越长,说明系统出了问题。
    svctm    表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如
             果await的值远高于svctm的值,则表示I/O队列等待太长,         系统上运行的应用程序将变慢。
    %util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备
             的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度
            一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。


    查看网络信息:
    Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等
    [root@alimysql03 ~]# netstat -t
    [root@alimysql03 ~]# netstat -u
    [root@alimysql03 ~]# netstat -alop
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name     Timer
    tcp        0      0 localhost:6379          0.0.0.0:*               LISTEN      31334/redis-server   off (0.00/0/0)
    tcp        0      0 alimysql03:ssh          192.168.75.161:54628    ESTABLISHED 27722/sshd: root@pt  keepalive (4256.28/0/0)
    tcp        0      0 alimysql03:39710        alimysql03:24913        ESTABLISHED 16154/mysqld         off (0.00/0/0)
    tcp        0      0 alimysql03:ssh          192.168.75.162:52753    ESTABLISHED 29032/sshd: root@pt  keepalive (5075.48/0/0)
    tcp        0      0 alimysql03:24913        alimysql03:39712        ESTABLISHED 16154/mysqld         off (0.00/0/0)
    tcp6       0      0 alimysql03:mysql        alimysql05:38306        ESTABLISHED 16154/mysqld         keepalive (3797.49/0/0)
    tcp6       0      0 alimysql03:mysql        alimysql04:47580        TIME_WAIT   -                    timewait (1.84/0/0)
    tcp6       0      0 alimysql03:mysql        alimysql05:38304        ESTABLISHED 16154/mysqld         keepalive (3797.49/0/0)
    udp        0      0 localhost:323           0.0.0.0:*                           673/chronyd          off (0.00/0/0)

    Proto RefCnt Flags       Type       State         I-Node   PID/Program name     Path
    unix  2      [ ACC ]     STREAM     LISTENING     4263722  1/systemd            /var/run/rpcbind.sock
    unix  2      [ ACC ]     STREAM     LISTENING     9791     1/systemd            /run/systemd/private
    unix  2      [ ACC ]     STREAM     LISTENING     4241663  8624/mysqld          /opt/mysql/mysql3307.sock
    unix  2      [ ACC ]     STREAM     LISTENING     9799     1/systemd            /run/lvm/lvmetad.socket
    unix  2      [ ]         DGRAM                    9832     1/systemd            /run/systemd/shutdownd
    unix  2      [ ACC ]     STREAM     LISTENING     9834     1/systemd            /run/lvm/lvmpolld.socket
    unix  2      [ ]         DGRAM                    1387     1/systemd            /run/systemd/notify
    unix  2      [ ]         DGRAM                    1389     1/systemd            /run/systemd/cgroups-agent


    第二步:制作AWR报表
    [root@alimysql03 ~]#su - oracle
    [oracle@alimysql03 ~]#sqlplus / as sysdba
    sys as sysdba
    --调用脚本,生成文件
    SQL> @?/rdbms/admin/awrrpt.sql
    输入报告参数
    输入生成报告类型,目前AWR提供txt和html两种格式。需要确认生成格式,默认是html格式。
    html
    报告涉及天数范围
    3
    输入开始和结束的snapshot编号
    输入天数信息后,AWR生成代码会将天数范围内的snapshot镜像点列出,供输入选择
    Enter value for begin_snap: 1796
    Begin Snapshot Id specified: 1796
    Enter value for end_snap: 1813 
    确定报告名称
    最后就是确定生成报告的名称。一般采用默认的名称就可以了
    于是,指定目录上可以看到相应的报告文件。
    第二个就是调用脚本的方式问题。调用时使用的sqlplus客户端可以在Oracle服务器本机上(远程登录),也可以在客户端机器本
    机上。笔者建议是在客户端本机上进行生成,这样可以避免报告文件来回拷贝的工作。但是最好要保证客户端版本与服务器版本相匹配。


    第三步查看AWR报表,找出问题的SQL或者系统在哪里出现问题
    SQL ordered by Elapsed Time
    Resources reported for PL/SQL code includes the resources used by all SQL statements called by the code.
    % Total DB Time is the Elapsed Time of the SQL statement divided into the Total Database Time multiplied by 100
    %Total - Elapsed Time as a percentage of Total DB time
    %CPU - CPU Time as a percentage of Elapsed Time
    %IO - User I/O Time as a percentage of Elapsed Time
    Captured SQL account for 99.0% of Total DB Time (s): 7,366
    Captured PL/SQL account for 0.0% of Total DB Time (s): 7,366
    Elapsed Time (s)Executions Elapsed Time per Exec (s) %Total %CPU %IO SQL Id SQL Module SQL Text
    7,163.06 20,563 0.35 97.24 99.96 0.00 a2tdryafmbwch OGG-RJRWZ2ZX-OPEN_DATA_SOURCE DELETE FROM "JRWZ2_ZX"."JS_ZX_...
    54.38 3 18.13 0.74 99.90 0.00 gf507afc2c36b TOAD 12.1.0.22 select sql_text from v$sql whe...
    29.07 32 0.91 0.39 99.81 0.00 bps65v7v04b9h TOAD 12.1.0.22 SELECT a.sid, decode(b.class, ...
    14.19 66 0.21 0.19 99.80 0.00 dzm7tjg4ksc0b TOAD background query session Select lk.SID, se.username, se...
    8.17 1 8.17 0.11 21.74 77.77 abmvfc90dzky0 TOAD 12.1.0.22 select count(1) from JRWZ2_ZX....
    6.87 1 6.87 0.09 22.59 79.38 40ycagu7bv1gv TOAD 12.1.0.22 select count(1) from jrwz2_zx....
    2.50 156 0.02 0.03 99.09 0.00 dtgnyrc4v3tk4 TOAD 12.1.0.22 SELECT round(bitand(s.ownerid,...
    2.46 3 0.82 0.03 87.72 0.00 6btpzpwsbw52s TOAD background query session SELECT sid, owner, type, objec...
    1.54 28 0.05 0.02 99.84 0.00 4q2wng79hbc1w TOAD 12.1.0.22 select o.sid, o.sql_text, o.ad...
    0.82 55 0.01 0.01 98.85 0.00 6zzd74gqqndf2 TOAD 12.1.0.22 SELECT round(bitand(s.ownerid,...
    Back to SQL Statistics
    Back to Top
    a2tdryafmbwch这条sql_id的执行状态: Elapsed Time花费时间为7163秒,Executions重复执行次数为20563次,%CPU为99.96


    SQL ordered by CPU Time
    Resources reported for PL/SQL code includes the resources used by all SQL statements called by the code.
    %Total - CPU Time as a percentage of Total DB CPU
    %CPU - CPU Time as a percentage of Elapsed Time
    %IO - User I/O Time as a percentage of Elapsed Time
    Captured SQL account for 99.6% of Total CPU Time (s): 7,298
    Captured PL/SQL account for 0.0% of Total CPU Time (s): 7,298
    CPU Time (s) Executions CPU per Exec (s) %Total Elapsed Time (s) %CPU %IO SQL Id SQL Module SQL Text
    7,159.86 20,563 0.35 98.10 7,163.06 99.96 0.00 a2tdryafmbwch OGG-RJRWZ2ZX-OPEN_DATA_SOURCE DELETE FROM "JRWZ2_ZX"."JS_ZX_...
    54.33 3 18.11 0.74 54.38 99.90 0.00 gf507afc2c36b TOAD 12.1.0.22 select sql_text from v$sql whe...
    29.02 32 0.91 0.40 29.07 99.81 0.00 bps65v7v04b9h TOAD 12.1.0.22 SELECT a.sid, decode(b.class, ...
    14.16 66 0.21 0.19 14.19 99.80 0.00 dzm7tjg4ksc0b TOAD background query session Select lk.SID, se.username, se...
    2.48 156 0.02 0.03 2.50 99.09 0.00 dtgnyrc4v3tk4 TOAD 12.1.0.22 SELECT round(bitand(s.ownerid,...
    2.16 3 0.72 0.03 2.46 87.72 0.00 6btpzpwsbw52s TOAD background query session SELECT sid, owner, type, objec...
    1.78 1 1.78 0.02 8.17 21.74 77.77 abmvfc90dzky0 TOAD 12.1.0.22 select count(1) from JRWZ2_ZX....
    1.55 1 1.55 0.02 6.87 22.59 79.38 40ycagu7bv1gv TOAD 12.1.0.22 select count(1) from jrwz2_zx....
    1.53 28 0.05 0.02 1.54 99.84 0.00 4q2wng79hbc1w TOAD 12.1.0.22 select o.sid, o.sql_text, o.ad...
    0.81 55 0.01 0.01 0.82 98.85 0.00 6zzd74gqqndf2 TOAD 12.1.0.22 SELECT round(bitand(s.ownerid,...
    Back to SQL Statistics
    Back to Top


    SQL ordered by User I/O Wait Time
    Resources reported for PL/SQL code includes the resources used by all SQL statements called by the code.
    %Total - User I/O Time as a percentage of Total User I/O Wait time
    %CPU - CPU Time as a percentage of Elapsed Time
    %IO - User I/O Time as a percentage of Elapsed Time
    Captured SQL account for 73.6% of Total User I/O Wait Time (s): 18
    Captured PL/SQL account for 0.6% of Total User I/O Wait Time (s): 18
    User I/O Time (s) Executions UIO per Exec (s) %Total Elapsed Time (s) %CPU %IO SQL Id SQL Module SQL Text
    6.35 1 6.35 35.02 8.17 21.74 77.77 abmvfc90dzky0 TOAD 12.1.0.22 select count(1) from JRWZ2_ZX....
    5.45 1 5.45 30.05 6.87 22.59 79.38 40ycagu7bv1gv TOAD 12.1.0.22 select count(1) from jrwz2_zx....
    0.62 2 0.31 3.43 0.66 2.42 94.04 350myuyx0t1d6   insert into wrh$_tablespace_st...
    0.25 1 0.25 1.40 0.27 5.13 93.34 a6ktvdq2g8q99 TOAD 12.1.0.22 SELECT ou.NAME owner, oc.NAME ...
    0.11 2 0.06 0.62 0.31 61.32 36.34 6ajkhukk78nsr   begin prvt_hdm.auto_execute( :...
    0.07 2 0.04 0.39 0.07 5.39 96.12 4bh0c6kf1dw2q TOAD 12.1.0.22 select count(1) from jrwz2_zx....
    0.06 1 0.06 0.34 0.06 1.57 96.39 83yqh77vjh1jr TOAD 12.1.0.22 SELECT o.owner, o.object_name,...
    0.06 36 0.00 0.32 0.06 12.52 90.20 3m8smr0v7v1m6   INSERT INTO sys.wri$_adv_messa...
    0.06 1 0.06 0.31 0.08 24.55 73.69 fnk7155mk2jq6   insert into wrh$_sysmetric_his...
    0.06 1 0.06 0.31 0.06 1.74 98.25 apw0wpatc3pu8 TOAD 12.1.0.22 Select owner, object_name, obj...
    [oracle@bspdev test]$ ls -l
    total 508
    -rw-r--r--. 1 oracle oinstall 515262 Jun 21 13:10 awrrpt_1_1796_1813.html


    找出有问题的SQL:sql_id为a2tdryafmbwch   花费时间7,163.06秒 20,563 0.35 97.24 99.96 0.00 a2tdryafmbwch OGG-RJRWZ2ZX-OPEN_DATA_SOURCE 
    如果SQL不在awr报表中,可以通过模糊查询找到这个SQL,例如:
    --1.执行一个SQL
    SELECT /* TOTO */ ename, dname
    FROM dept d join emp e USING (deptno);
    --2.获取这个SQL的sql_id和 child_number
    SELECT sql_id, child_number
    FROM v$sql
    WHERE sql_text LIKE '%TOTO%';
    SQL_ID         CHILD_NUMBER
    ----------     -----------------------------
    gwp663cqh5qbf   0


    --3.根据sql_id就可以显示刚才那个SQL的执行计划
    select  * from table(DBMS_XPLAN.DISPLAY_CURSOR('a2tdryafmbwch',0,'all'))
    select  * from  v$sql where sql_id='a2tdryafmbwch'
    sql_id表示存储在cursor cache中的SQL语句的id,child_number用于指示缓存sql语句计划的子id,format参数用于控制包含在输出中的信息类型,官档的参数如下:
    1.BASIC: 显示最少的信息,只包括操作类型,ID名称和选项。
    2.TYPICAL: 默认值,显示相关信息以及某些附加的显示选项,如分区和并发使用等。
    3.SERIAL: 与TYPICAL类型相似,区别是它不包括并发的信息,即使是并行执行的计划。
    4.ALL: 显示最多的信息,包含了TYPICAL的全部以及更多的附加信息,如别名和远程调用等

    查看执行计划的内容,然后判断哪里有问题
    PLAN_TABLE_OUTPUT
    SQL_ID    a2tdryafmbwch,  child  number  0
    -------------------------------------
    DELETE  FROM  "JRWZ2_ZX"."JS_ZX_JYDX_CJB"    WHERE  "BZ"  =  :b0  AND  "SSSQ"  = 
    :b1  AND  "GF_NSRSBH"  =  :b2  AND  "XF_NSRSBH"  =  :b3  AND  "JE"  =  :b4  AND  "SE" 
    =  :b5  AND  "LRSJ"  =  :b6  AND  "NSRSBH"  =  :b7  AND  ROWNUM  =  1
     
    Plan  hash  value:  54941260
    --------------------------------------------------------------------------------------------------------
    |  Id    |  Operation                                          |  Name                                      |  Rows    |  Bytes  |  Cost  (%CPU)|  Time          |
    --------------------------------------------------------------------------------------------------------
    |     0  |  DELETE  STATEMENT                            |                    |              |              |        23  (100)|                    |
    |      1  |    DELETE                                              |  JS_ZX_JYDX_CJB                  |              |              |                        |                    |
    |*    2  |      COUNT  STOPKEY                              |                                                |              |              |                        |                    |
    |*    3  |        TABLE  ACCESS  BY  INDEX  ROWID|  JS_ZX_JYDX_CJB                  |          1  |        81  |        23      (0)|  00:00:01  |
    |*    4  |          INDEX  RANGE  SCAN                    |  IDX_JS_ZX_JYDX_CJB_NSR  |      445  |              |          4      (0)|  00:00:01  |
    --------------------------------------------------------------------------------------------------------

    Predicate  Information  (identified  by  operation  id):
    --------------------------------------------------- 
          2  -  filter(ROWNUM=1)
          3  -  filter(("GF_NSRSBH"=:B2  AND  "XF_NSRSBH"=:B3  AND  "SSSQ"=:B1  AND  "BZ"=:B0  AND 
                                "JE"=TO_NUMBER(:B4)  AND  "SE"=TO_NUMBER(:B5)  AND  "LRSJ"=:B6))
          4  -  access("NSRSBH"=:B7)

    查看这个表是否有索引,索引是否生效,,这个表的数据总量是多少,重复数据是多少,看下表结构是否有text,blob等内容,是否有高水位,碎片等问题,表是否有问题。


    根据执行计划,来判断SQL语句的效率,看是否可以改善。
    因为"JRWZ2_ZX"."JS_ZX_JYDX_CJB"表NSRSBH是有建索引,但是有很多重复的数据。然后考虑建个复合索引,尽量确定是唯一的。
    create index idx_JS_ZX_JYDX_CJB on JRWZ2_ZX.JS_ZX_JYDX_CJB(GF_NSRSBH,XF_NSRSBH);
    然后SQL运行的时间很快就完成了。


    展开全文
  • 原因很简单,Oracle给一个参数一个默认值是让它最大限度地适用于每个数据库,所以它几乎是最优的,当然,绝对有个别数据库需要适当调整,但我认为那是个例,并且,很时候,修改这些参数的人,他们修改的理由并不是...
  • // 三个参数分别为宽、高、位数 SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5); // 设置字体 specCaptcha.setFont(new Font("Verdana", Font.PLAIN, 32)); // 有默认字体,可以不用设置 // 设置类型...
  • 你必须知道的495C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    然后又使用一些内存分配技巧使namestr数组用起来好像有多个元素,namelen记录了元素个数。它是怎样工作的?这样是合法的和可移植的吗? 2.8 我听说结构可以赋给变量也可以对函数传入和传出。为什么K&R1却明确说明...
  • 《你必须知道的495C语言问题》

    热门讨论 2010-03-20 16:41:18
    书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。 《你必须知道的495个C语言问题》结构...
  • 然后又使用一些内存分配技巧使namestr数组用起来好像有多个元素,namelen记录了元素个数。它是怎样工作的?这样是合法的和可移植的吗? 23  2.8 我听说结构可以赋给变量也可以对函数传入和传出。为什么K&R1却明确...
  • 封装了 100 多个有用的方法,耦合度低,非常适合逐个方法阅读,适合楼主这样的 JavaScript 初学者。从中,你不仅可以学到用 void 0 代替 undefined 避免 undefined 被重写等一些小技巧 &#...
  • 你必须知道的495C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    来好像有多个元素。这样合法和可移植吗? . . . . . . . . . . . . 8 2.7 是否有自动比较结构的方法? . . . . . . . . . . . . . . . . . . . . 8 2.8 如何向接受结构参数的函数传入常数值? . . . . . . . . . . ....
  • 【基础】一个".java"源文件中是否可以包含多个类(不是内部类)?有什么限制? 30 【基础】Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口? 30 【基础】Java 中的final关键字有哪些用法?...
  • 就类似于“近朱者赤近墨者黑”,通过你周围的人来判断你是怎么样的一人。 2.KNN算法有什么用 答:他可以用于分类预测,也可以用于回归预测,但是一般用于分类预测的比较。 3.如何使用KNN from sklearn import ...

    对于KNN的讲解分两期,这是上半部分

    1.什么是KNN算法

    答:所谓的KNN算法就是:每个样本都可以用它最接近的k个邻居来代表。就类似于“近朱者赤近墨者黑”,通过你周围的人来判断你是怎么样的一个人。

    2.KNN算法有什么用

    答:他可以用于分类预测,也可以用于回归预测,但是一般用于分类预测的比较多。

    3.如何使用KNN

    from sklearn import datasets
    from sklearn.model_selection import train_test_split
    from sklearn.neighbors import KNeighborsClassifier
    
    #1. 加载数据集
    digits = datasets.load_digits()
    x = digits.data    
    y = digits.target  
    
    #2. 对数据集进行分割,分出训练集(x_train,y_train)、测试集(x_test,y_test)
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
    
    # 3.创建KNN分类器my_knn_clf,参数n_neighbors=5表示用它周围的5个数据来预测
    my_knn_clf = KNeighborsClassifier(n_neighbors=5)
    # 4.将训练集数据喂入,使用fit函数
    my_knn_clf.fit(x_train, y_train)
    # 5.用测试集进行测试,输出一个预测值,使用predict进行预测
    y_predict = my_knn_clf.predict(x_test)
    
    # 6.计算准确率
    score = my_knn_clf.score(x_test, y_test)
    print(score)
    

    4.优化KNN算法(参数)

    • 通过上面的代码我们就可以了解KNN最基本的使用过程了。
      可以发现,在上述代码中,创建分类器的时候参数n_neighbors=5,(也就是k=5),通过调整k的值,可以发现k对于预测结果是有影响的。那么如何选择最优的k呢?

    • 对于k的优化方法如下:

    from sklearn import datasets
    from sklearn.model_selection import train_test_split
    from sklearn.neighbors import KNeighborsClassifier
    
    
    digits = datasets.load_digits()
    x = digits.data  
    y = digits.target 
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=666)
    
    # 假设最优的K为1,最优准确率为0
    best_score = 0.0
    best_k = 1
    # 然后在(1,11)里面选择k的值,每得到一个k就能计算出一个准确率score,
    # 将score和best_score进行比较,如果当前k得到的score比best_score好,则令best_k=k
    # 如果k的值为(1,11)的边缘值,例如k=10,则需要在一个更大的范围(10,15)测试一下有没有比10更好的k
    
    for k in range(1, 11):
         knn_clf = KNeighborsClassifier(n_neighbors=k)
         knn_clf.fit(x_train, y_train)
         score = knn_clf.score(x_test, y_test)
    
         if score > best_score:
             best_score = score
            best_k = k
    
     print('best_k = ', best_k)
     print('best_score = ', best_score)
    
    • 仔细看看会发现,我们由样本周围的k个数据来进行分类。比如假设k=9,一个球sample,它的周围有五个红球,四个绿球,(每个球的权重都是1)则根据少数服从多数,则sample是红球。

    • 但是如果是下面这种情形,还把sample分类为红球,很明显就不合理了,说明每个球的权重都是1是不太合适的。那么就引入了权重的概念,接下来就开始看一下什么是权重以及怎么选择每一个数据的权重,最优化权重。
      在这里插入图片描述

    5.什么是权重以及如何计算并优化权重?

    • 所谓权重(weights)就是一个样本对另一个样本的影响程度,影响程度大,占的权重就大。
    • 从上图看,我们会觉得不合理的原因是因为明显是整体上蓝色样本离sample比较近,却将它分类为红色。这是因为在上述例子中,每一个样本的权重都是一样的.所以说明在某些场合下权重都相等是不合适的。

    weights有两种形式:
    1.weights=’uniform’, 也就是权重都一样
    2.weights=‘distance’,也就是权重和距离相关

    • *** 距离的计算公式:***在这里插入图片描述
      1.当weights=’uniform’时:我们不需要计算距离,只用管k就好了
      2.当weights='distance’时,通过距离公式计算距离,然后就可以求出权重了。

    • 由距离公式知,给定两个样本x,y,再给定一个超参数p,(p是我们自己定的)就可以求出距离了,也就可以求出权重了。而对于选择最优p的方法和k类似。

    from sklearn import datasets
    from sklearn.model_selection import train_test_split
    from sklearn.neighbors import KNeighborsClassifier
    
    
    digits = datasets.load_digits()
    x = digits.data  
    y = digits.target 
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=666)
    best_score = 0.0
    best_k = 1
    best_p = 0
    for k in range(1, 11):
        for p in range(1, 6):
            """weights = uniform的时候,就没有P参数
                weights = distance 时,需要有p参数"""
            knn_clf = KNeighborsClassifier(n_neighbors=k, weights="distance", p=p)
            knn_clf.fit(x_train, y_train)
            score = knn_clf.score(x_test, y_test)
    
            if score > best_score:
                best_p = p
                best_score = score
                best_k = k
    
    print('best_k = ', best_k)
    print('best_score = ', best_score)
    print('best_p = ', best_p)
    

    6.总结:

    • 流程:加载数据集 => 分割数据集 => 创建分类器 => 将训练集数据放进分类器训练 => 将测试集用于测试得到预测值 => 输出准确率
    • 超参数优化:weights=‘uniform’时,影响模型准确率的因素为k,当weights=‘distance’时,影响的因素有k,p
    • 现在讲述的优化超参数的方法都是最直接的最易于理解的,后面还有其他方法可以进行更好的优化
    展开全文
  • 采用预编译指令集使用正则表达式过滤参数字符串过滤或替换前端判断是否有非法字符,寻找出能sql注入的地方mysql常用的优化方法索引优化 (索引使用的是B+ tree)列中有空值不建索引使用短索引对where子句使用的列建立...

    如何防止sql注入

    1. 最有效的方法,采用预编译指令集
    2. 使用正则表达式过滤参数
    3. 字符串过滤或替换
    4. 前端判断是否有非法字符,寻找出能sql注入的地方

    mysql常用的优化方法

    索引优化 (索引使用的是B+ tree)

    1. 列中有空值不建索引
    2. 使用短索引
    3. 对where子句使用的列建立索引
    4. 多个列where或order by的建立组合索引
    5. 对like语句,%开头不用结尾用(最左不用原则)  why:索引相当于字典,不知道开头怎么查?

    sql优化

    1. 使用join语句,使用内连接代替外连接,使用小表驱动大表
    2. 使用explain分析查询语句
    3. 查询日志,对执行慢的sql进行优化
    4. 千万级分页时使用limit
    5. 对于经常使用的查询,开启缓存
    6. 批量操作

    表的优化

    1. 字段尽量设置为not null
    2. 字段长度固定

    数据库优化

    1. 将表分区
    2. 读写分离/建立主从关系

    mybatis的实现原理

    根据配置->创建SQL sessionfactory->(根据配置文件,注解)sqlsession->执行映射的sql语句->关闭sqlsession。

    悲观锁与乐观锁

    悲观锁与乐观锁的实际应用

    乐观锁

    首先假设数据冲突很少,只有在数据提交修改的时候才进行校验,如果冲突了则不会进行更新。

    通常的实现方式增加一个version字段,为每一条数据加上版本。每次更新的时候version+1,并且更新时候带上版本号。

    乐观锁在实际应用相对较多,它可以提供更好的并发访问,并且数据库开销较少,但是有可能存在脏读的情况。

    悲观锁

    当一个事务锁定了一些数据之后,只有当当前锁提交了事务,释放了锁,其他事务才能获得锁并执行操作。

    悲观锁一般是用于并发不是很高,并且不允许脏读等情况。但是对数据库资源消耗较大。

    数据库的水平拆分与垂直拆分

    数据库的水平拆分与垂直拆分




    展开全文
  • 4.1.8 抽象类和接口的区别,类可以继承多个类么,接口可以继承多个接口么,类可以实现多个接口么。 4.1.9 继承和聚合的区别在哪。 4.2.0 IO模型有哪些,讲讲你理解的nio ,他和bio,aio的区别是啥,谈谈reactor模型...
  • 在这些问题的解决过程中,作者还潜移默化地帮助读者形成了建模决策的方法论,建模误差和数值误差怎么取舍,怎样为具体问题建立数学模型,如何抓住问题中的主要矛盾(模型中的关键参数),再一步一步地优化或者验证...
  • 怎么从有限的信息判断德军装甲部队的规模,你所支持的球队有大可能赢得冠军,在《龙与地下城》勇士中,你应当对游戏角色属性的峰值有什么样的期望,甚至在普通的彩弹射击游戏中,拥有一些贝叶斯思维也能帮助到你...
  • 怎么从有限的信息判断德军装甲部队的规模,你所支持的球队有大可能赢得冠军,在《龙与地下城》勇士中,你应当对游戏角色属性的最大值有什么样的期望,甚至在普通的彩弹射击游戏中,拥有一些贝叶斯思维也能帮助到你...
  • 怎么从有限的信息判断德军装甲部队的规模,你所支持的球队有大可能赢得冠军,在《龙与地下城》勇士中,你应当对游戏角色属性的最大值有什么样的期望,甚至在普通的彩弹射击游戏中,拥有一些贝叶斯思维也能帮助到你...
  • 17. 数据库组合索引,储存在一个叶子节点还是多个? 44 17.1. 索引的利弊与如何判定,是否需要索引: 44 17.1.1. 索引的好处 44 17.1.2. 索引的弊端 44 17.1.3. 如何判定是否须要创建索引 44 17.2. 复合索引优化 45 ...
  • 代码太了就不贴上来了,经过优化(补分号‘;’,判断单行补‘{}’)发现还是一样的问题 [和这问题很像][1] [1]: ...
  • 怎么从有限的信息判断德军装甲部队的规模,你所支持的球队有大可能赢得冠军,在《龙与地下城》勇士中,你应当对游戏角色属性的很大值有什么样的期望,甚至在普通的彩弹射击游戏中,拥有一些贝叶斯思维也能帮助到你...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 160
精华内容 64
关键字:

多个参数判断怎么优化