信息发布软件,b2b软件,广告发布软件

 找回密码
 立即注册
搜索
查看: 6049|回复: 20
打印 上一主题 下一主题

Oracle内存中的SGA是如何构造而成的

[复制链接]

1868

主题

1878

帖子

1万

积分

积分
10928
跳转到指定楼层
宣传软件楼主
发表于 2017-9-6 20:17:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

软件教程首图:

软件教程分类:Oracle基础教程 

软件图文教程视频教程分类:软件图文教程 

软件教程难易程度:软件高级教程 

软件教程发布日期:2017-09-06

软件教程关键字:

① 本信息收集于网络,如有不对的地方欢迎联系我纠正!
② 本信息免费收录,不存在价格的问题!
③ 如果您的网站也想这样出现在这里,请您加好友情链接,我当天会审核通过!

④友情链接关键字:软件定制网站 网址:http://www.postbbs.com

软件教程详细描述
本帖最后由 群发软件 于 2017-9-6 20:24 编辑

概述
在《Oracle内存结构研究-PGA篇》一文中提到,PGA是一个服务器进程的专用的私有内存区,而SGA则是共享内存区。

SGA由多个部分组成:
1,        固定SGA(Fixed SGA)
2,        块缓冲区(Db cache)
3,        重做日志缓冲区(Redo log buffer)
4,        Java池(Java pool)
5,        大池(Large pool)
6,        共享池(Shared pool)
7,        流池(Stream pool)

有如下参数控制共享池相关组件大小:
1,        JAVA_POOL_SIZE:控制Java池大小。
2,        SHARED_POOL_SIZE:9i中控制共享池中占用最大的部分,10g以上控制共享池大小。
3,        LARGE_POOL_SIZE:控制大池大小。
4,        DB_*K_CACHE_SIZE:控制不同块大小的缓冲区大小。
5,        LOG_BUFFER:控制重做日志缓冲区大小。
6,        SGA_TARGET:10g以上控制自动SGA内存管理的总内存大小。
7,        SGA_MAX_SIZE:控制SGA可以达到的最大大小,改变需重启数据库。

下面将详细介绍各个部分的作用和推荐设置。



二、SGA各组件作用
1,        固定SGA:
顾名思义,是一段不变的内存区,指向SGA中其他部分,Oracle通过它找到SGA中的其他区,可以简单理解为用于管理的一段内存区。

2,        块缓冲区:
查询时,Oracle会先把从磁盘读取的数据放入内存,以后再查询相关数据时不用再次读取磁盘。插入和更新时,Oracle会现在该区中缓存数据,之后批量写到硬盘中。通过块缓冲区,Oracle可以通过内存缓存提高磁盘的I/O性能。
块缓冲区中有三个区域:
        默认池(Default pool):所有数据默认都在这里缓存。
        保持池(Keep pool):用来缓存需要多次重用的数据。
        回收池(Recycle pool):用来缓存很少重用的数据。
原来只有一个默认池,所有数据都在这里缓存。这样会产生一个问题:大量很少重用的数据会把需重用的数据“挤出”缓冲区,造成磁盘I/O增加,运行速度下降。后来分出了保持池和回收池根据是否经常重用来分别缓存数据。
        这三部分内存区需要手动确定大小,并且之间没有共享。例如:保持池中已经满了,而回收池中还有大量空闲内存,这时回收池的内存不会分配给保持池。
        9i开始,还可以设置db_nk_cache。9i之前数据库只能使用相同的块大小。9i开始同一个数据库可以使用多种块大小(2KB,4KB,8KB,16KB,32KB),这些块需要在各自的db_nk_cache中缓存。如果为不同的表空间指定了不同的块大小,需要为其设置各自的缓冲区。

3,        重做日志缓冲区(Redo log buffer):
数据写到重做日志文件之前在这里缓存,在以下情况中触发:
        每隔3秒
        缓存达到1MB或1/3满时
        用户提交时
        缓冲区的数据写入磁盘前

4,        Java池(Java pool):
在数据库中运行Java代码时用到这部分内存。例如:编写Java存储过程在服务器内运行。需要注意的是,该内存与常见的Java编写的B/S系统并没关系。用JAVA语言代替PL/SQL语言在数据库中写存储过程才会用到这部分内存。

5,        大池(Large pool):
下面三种情况使用到大池:
        并行执行:存放进程间的消息缓冲区
        RMAN:某些情况下用于磁盘I/O缓冲区
        共享服务器模式:共享服务器模式下UGA在大池中分配(如果设置了大池)

6,        共享池(Shared pool)
共享池是SGA中最重要的内存段之一。共享池太大和太小都会严重影响服务器性能。
SQL和PL/SQL的解释计划、代码,数据字典数据等等都在这里缓存。
SQL和PL/SQL代码在执行前会进行“硬解析”来获得执行计划及权限验证等相关辅助操作。“硬解析”很费时间。对于响应时间很短的查询,“硬解析”可以占到全部时间的2/3。对于响应时间较长的统计等操作,“硬解析”所占用的时间比例会下降很多。执行计划及所需的数据字典数据都缓存在共享池中,让后续相同的查询可以减少很多时间。
不使用“绑定变量”导致:
        系统需要花费大量的资源去解析查询。
        共享池中的代码从不重用,系统花费很大代价管理这部分内存。
关于共享变量的优缺点讨论已经超过了这篇文章的范畴,简单来讲,响应时间短的查询要使用共享变量,响应时间长的统计不使用共享变量。
        需要注意的是,SHARED_POOL_SIZE参数在9i中控制共享池中占用最大的部分,10g以上控制共享池总大小。

7,        流池(Stream pool)
9iR2以上增加了“流”技术,10g以上在SGA中增加了流池。流是用来共享和复制数据的工具。



三、SGA设置
没有通用的设置,所有设置都要根据系统的负载、业务需求和硬件环境来进行调整。这里只是总结出大体的设定,避免因SGA设置不当引起的问题。

1,自动SGA内存管理
        在Oracle 10g中引入了自动SGA内存管理特性,DBA可以设定SGA_TARGET告诉Oracle可用的SGA内存为多大,由Oracle根据系统负载来动态调整各组件大小,相应的数定会保存在控制文件中,使数据库重启后也记得各组件大小。
需要注意一下几点:
        要使用自动SGA内存管理,STATISTICS_LEVEL参数必须设为TYPICAL或ALL,系统自动收集相应的信息用来动态调整SGA设定。
        可以设定某个组件的值,Oracle使用此值为该组件的最小大小

可动态调整的参数:
DB_CACHE_SIZE,SHARED_POOL_SIZE,LARGE_POOL_SIZE,JAVA_POOL_SIZE。
需手动设置的参数:
LOG_BUFFER,STREAMS_POOL,DB_NK_CACHE_SIZE,DB_KEEP_CACHE_SIZE,DB_RECYCLE_CACHE_SIZE。

2,手动SGA内存管理
1)        32bit和64bit限制
在32位的操作系统中,Oracle最大可用内存为1.75g,也就是说SGA+PGA<=1.75g,超过这一限制的内存将不会被Oracle用到。
32位的Oracle可以装到64位的操作系统上,64位的Oracle不可以装到32位的操作系统上。

2)        查看Oracle版本:
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 – Production

3)        各组件设置:
JAVA_POOL_SIZE:如果没用到数据库端java的系统,30MB足够。

LOG_BUFFER:默认为MAX(512KB,128KB*CPU个数)。一般系统1MB足够,运行大型事务的系统可以设为2MB,让1/3满写入日志文件时可以继续写入缓冲,再大也没有意义。

SHARED_POOL_SIZE:过大过小都会严重影响系统性能,1GB内存可以设为100MB,2GB内存可设为150MB,4GB内存可设为300MB。共享池命中过低首先要调整的是应用程序而不是扩大共享池。使用绑定变量可以减少共享池需求、提高命中率,减少共享池管理负担和LATCH竞争。

LARGE_POOL_SIZE:使用专用服务模式可设为30MB,除非必要,不然不建议使用共享服务器模式。

DB_CACHE_SIZE:除去上述内存外其他可用内存都分配给该区域。

总结
32位Oracle:
1G内存:SHARED_POOL_SIZE=100MB,DB_CACHE_SIZE=0.5GB;
2G内存:SHARED_POOL_SIZE=150MB,DB_CACHE_SIZE=1.25GB;

64位Oracle
4G内存:SHARED_POOL_SIZE=200MB,DB_CACHE_SIZE=2.5GB;
8G内存:SHARED_POOL_SIZE=400MB,DB_CACHE_SIZE=5GB;
12G内存:SHARED_POOL_SIZE=500MB,DB_CACHE_SIZE=8GB

再次强调,以上只是避免因SGA设置不当引起问题的大体设置,需要根据具体的系统负载和业务逻辑结合Stackpack等工具细调。

在Oracle进行数据处理的过程中,代价最昂贵的就是物理 I/O操作了。相同的数据从内存中得到要比从磁盘上读取快的多。
因此。优化Oracle的一个重要的目标就是尽可能的减少物理 I/O操作。
Oracle的 Buffer Cache用于缓存从磁盘中读取的数据。当 Oracle须要查找某些信息的时候,首先会在 BufferCache中寻找。假设找到了。则直接将结果返回。假设找不到,则须要对磁盘进行扫描, Oracle将在从磁盘扫描得到的结果返回的同一时候。会把这些数据在Buffer Cache中也保留一份,假设下次须要訪问同样的数据块的时候,则不须要再次扫描磁盘,而是直接从 Buffer Cache中读取就可以。

&sup2; 数据快速缓存由初始化參数DB_CACHE_SIZE指定大小,由很多大小相等的缓存块组成,这些缓存块的大小和OS块大小同样。这些缓存块分为 3 大类:  
n 脏缓存块(Dirty buffers ):
脏缓存块中保存的已被改动过的缓存块。即当一条SQL语句对某个缓存块中的数据进行改动后,该缓存块就被标记为脏缓存块。
最后。脏缓存块被DBWn进程写入到硬盘的数据文件里,永久保留起来。
n 命中缓存块(Pinned buffers ):
命中缓存块中保存的是近期正在被訪问的缓存块。它始终被保留在数据快速缓存中,不会被写入数据文件。
n 空暇缓存块(Freebuffers):
       该缓存块中没有数据。等待被写入数据。
oracle从数据文件里读取数据后,寻找空暇缓存块,以便写入当中。
&sup2; 标准数据库缓冲区缓存分为下面三种:
n 保持(keep)缓冲池:长期保存在内存中,直到数据库被关闭为止,其大小由BUFFER_POOL_KEEP指定。

n 再生(recycle)缓冲池:数据一旦用毕后就被换出内存中,其大小由BUFFER_POOL_RECYCLE指定。
n 默认(default)缓冲池:数据使用LRU调度算法来换出。其大小由DB_CACHE_SIZE 决定。

&sup2; 工作原理和过程LRU(近期最少使用 Least Recently Used )。Oracle通过 2 个列表(DIRTY、LRU)来管理缓存块。
n DIRTY 列表中保存已经被改动但还没有被写入到数据文件里的脏缓存块。

n LRU    列表中保存还没有被移动到DIRTY列表中的脏缓存块、空暇缓存块、命中缓存块。当某个缓存块被訪问后。该缓存块就被移动到LRU列表的头部(Most Recent Used, MRU端),其它缓存块就向LRU列表的尾部(Least Recently Used, LRU 端)移动。放在最尾部的缓存块就最先被移出LRU列表。
说明:假设用户运行的是全表扫描的操作,这些操作产生的数据缓冲不会放到 LRU端的 MRU端,而是放到LRU端。
由于Oracle觉得全表扫描得到的数据仅仅是临时的须要,这些数据以后被重用的机会非常少,应该高速的清除出缓冲区。把空间留给其它的更经常使用的数据。
能够在表的级别上改变这样的处理方式。
在建表的时候指定Cache语句会使得这张全表扫描得到的数据也放在 LRU链表的 MRU端。

n 数据快速缓存的工作原理过程是:
A、ORACLE在将数据文件里的数据块拷贝到数据快速缓存中之前,先在数据快速缓存中找空暇缓存块。以便容纳该数据块。Oracle 将从LRU列表的尾部開始搜索,直到找到所需的空暇缓存块为止。
B、假设先搜索到的是脏缓存块,则将该脏缓存块移动到DIRTY列表中,然后继续搜索。
假设搜索到的是空暇缓存块,则将数据块写入。然后将该缓存块移动到DIRTY列表的头部。
C、假设可以搜索到足够的空暇缓存块。就将全部的数据块写入到相应的空暇缓存块中。
则搜索写入过程结束。
D、假设没有搜索到足够的空暇缓存块。ORACLE就先停止搜索,激活DBWn进程。開始将DIRTY列表中的脏缓存块写入到数据文件里。

E、已经被写入到数据文件里的脏缓存块将变成空暇缓存块。并被放入到LRU列表中。
运行完毕这个工作后,再又一次開始搜索,直到找到足够的空暇缓存块为止。
&sup2; KEEP池和 RECYCLE池的使用
假设内存足够大,能够容纳全部的数据,则訪问不论什么数据都能够从内存中直接获得,那么效率肯定是最高的。可是在实际应用其中,常常是数据库的大小达到了几百个GB甚至是几个 TB,而 Oralce的可用内存仅仅有几个 GB大小。缓存中缓存的数据仅仅能占到整个数据库数据的非常小一部分,因此。这就要求必须合理的分配内存的使用。
假设可使用的内存空间比較小,导致数据库缓冲区的命中率比較低,则能够通过配置 KEEP池和 RECYCLE池,把性质不同的表分离到不同的数据缓冲区,以提高命中率,减少此操作对正常訪问的影响。
默认情况下,全部的表都是用 default池,它的大小就是缓冲区Buffer Cache的大小,由初始化參数 db_cache_size来决定。假设在建表或者改动表的时候指定STORAGE(BUFFER_POOLKEEP)或者 STORAGE(BUFFER_POOLRECYCLE)语句,就设置这张表使用 KEEP或者 RECYCLE缓冲区。这两个缓冲区的大小分别由初始化參数 db_keep_cache_size和db_recycle_cache_size来决定。
通过以下的sqlplus命令查看带“cache_size”字符串的系统參数值
SQL> show parametercache_size
结果例如以下:
db_16k_cache_size big integer 0
db_2k_cache_size big integer 0
db_32k_cache_size big integer 0
db_4k_cache_size big integer 0
db_8k_cache_size big integer 0
db_cache_size big integer 0 --属于SGA自己主动管理组件,值为0.
db_keep_cache_size big integer 0
db_recycle_cache_size big integer 0
SQL> alter system set db_keep_cache_size=16Mscope=both;
SQL> alter system setdb_recycle_cache_size=16M scope=both;
SQL> show parametercache_size
db_16k_cache_size big integer 0
db_2k_cache_size big integer 0
db_32k_cache_size big integer 0
db_4k_cache_size big integer 0
db_8k_cache_size big integer 0
db_cache_size big integer 0 --属于 SGA自己主动管理组件。值为0.
db_keep_cache_size big integer 16M
db_recycle_cache_size big integer 16M
n KEEP池
KEEP池用来缓存那些常常会被訪问的表。

KEEP池使用缓冲区独立于DEFAULT池。因此把最常常使用的表缓存到单独的缓冲区中,使得数据库的其它操作。如运行大量批操作也不会影响到这些在 KEEP缓冲区中的表。保证訪问这些最常使用的表的数据时,都能够从内存中直接获得。

SQL> col name format a30
SQL> col value format a30
SQL> conn scott/scott
SQL> create tabletest_default(col number(3)) storage(buffer_pool default);
SQL> create tabletest_keep(col number(3)) storage(buffer_pool keep);
SQL> create table test_recycle(colnumber(3)) storage(buffer_pool recycle);
SQL> insert intotest_default values(1);
SQL> insert into test_keepvalues(1);
SQL> commit;
SQL> set autotrace on statistics
SQL> select * fromtest_default;
统计信息
1 recursive calls
0 db block gets
7 consistent gets
0 physical reads
0 redo size
407 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> select * fromtest_keep;
统计信息
1 recursive calls
0 db block gets
7 consistent gets
0 physical reads
0 redo size
407 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> show sga
Total System Global Area 528482304 bytes
Fixed Size 1249944 bytes
Variable Size 150998376 bytes
Database Buffers 369098752 bytes
Redo Buffers 7135232 bytes
SQL> select369098752/1024/1024 from dual; --计算DatabaseBuffers的大小为352M
在上面的样例中,建立了两张表。 Test_default指定默认的default池,test_keep指定了keep池。分别插入了一条数据,然后打开自己主动跟踪,对这两张表进行查询。因为刚刚运行了 INSERT语句,这两条数据都存放在各自的缓冲区中。因此查询的物理读(physical reads)为 0。接着查看 buffer cache的值,发现大小为352M,SGA为504M。
以下构造一个较大的批操作,插入的数据大于 504M,将 default区域覆盖掉。
SQL> create tabletest_eat_memory (col1 varchar2(4000), col2 varchar2(4000), col3 varchar2(4000),col4 varchar2(4000), col5 varchar2(4000), col6 varchar2(4000), col7varchar2(4000), col8 varchar2(4000), col9 varchar2(4000), col10 varchar2(4000))storage(buffer_pool default);
SQL> insert intotest_eat_memory select rpad('1',4000,'1'), rpad('2',4000,'2'), rpad('3',4000,'3'),rpad('4',4000,'4'),rpad ('5',4000,'5'), rpad('6',4000,'6'), rpad('7',4000,'7'),rpad('8',4000,'8'), rpad('9',4000,'9'), rpad('0',4000,'0') from all_objectswhere rownum<=15000;   --插入15000行数据
统计信息
10410 recursive calls
564195 db block gets
108584 consistent gets
620 physical reads
637527688 redo size --大约插入了638M数据
678 bytes sent via SQL*Net to client
803 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
91 sorts (memory)
0 sorts (disk)
15000 rows processed
SQL> commit;
运行完批操作后,对两张表再次查询。
SQL> select * fromtest_default;
统计信息
70 recursive calls
0 db block gets
13 consistent gets
12 physical reads
0 redo size
407 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
2 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> select * fromtest_keep;
统计信息
70 recursive calls
0 db block gets
13 consistent gets
0 physical reads
0 redo size
407 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
2 sorts (memory)
0 sorts (disk)
rows processed
SQL> show sga
Total System Global Area 528482304 bytes
Fixed Size 1249944 bytes
Variable Size 150998376 bytes
Database Buffers 369098752 bytes --default区域没有变化
Redo Buffers 7135232 bytes
结果非常明显。因为 keep和 default池彼此独立,对于 test_keep的查询的物理读仍然为0,而对 test_default的查询则包括了12个物理读。
上面的样例能够看出,使用 keep池能够保证那些指定 keep池的表不受其它表的影响。
能够查询v$bh视图来查找到常常被使用的表,依据表的使用频繁度来确定是否指定 keep池。
select o.object_name, count(*)from dba_objects o, v$bh bh where o.object_id = bh.OBJD and o.owner != 'SYS'group by o.object_name having count(*) > 100 order by count(*) desc
确定好使用 keep池的表后,能够依据这些表的实际大小之和来计算缓冲区的大小。因为这个大小能够比較准确的计算出来。因此能够对这些表使用 cache,以保证即使採用全表扫描得到的数据也能够被缓冲。
通常情况下,并不追求 keep池的命中率达到 100%,假设命中率为 100%,则说明给 keep池的内存空间过大。有部分内存被浪费。
即使 keep池中缓存的都是些最常常訪问的表。这些訪问操作也不大可能訪问到表中全部的数据。
因此,能够适当的降低 keep池的内存分配,使 keep池的命中率维持在接近 100%的数值。
将这部分内存分配给其它的缓冲区。能够得到更高的效率。
    能够採用以下的SQL语句来计算 KEEP池的命中率。
SQL> select name,physical_reads, db_block_gets, consistent_gets, 1 -(physical_reads /(db_block_gets + consistent_gets)) "hit ratio" fromv$buffer_pool_statistics where name = 'KEEP';
n RECYCLE池
RECYCLE池用来缓存那些不希望保存在内存中的表。比如非常少进行扫描或者訪问的表。假设应用程序以一种随机的方式訪问一张比較大的表,这些被缓冲的数据在被清除出内存之前,非常少会有机会再次被訪问。这些数据存放在缓冲区其中,不仅会浪费内存空间,并且可能把其它的一些有可能被訪问的数据清除出去。
这些数据不是必需保存在缓冲区其中。能够通过使用 RECYCLE池来避免这些数据对其它数据的影响。
调整參数db_recycle_cache_size的大小来设置recycle池。一般来说。不须要给 recycle池非常大的内存空间。由于recycle池中的数据没有什么被缓存的价值。设置较小的缓冲区能够将很多其它的内存留给keep 和default池。
可是。假设缓冲区太小的话,数据可能在事务结束之前就从内存从中被清除了,这会导致额外的性能问题。

SQL> truncate tabletest_eat_memory;
SQL> select * fromtest_default;
统计信息
0 recursive calls
0 db block gets
7 consistent gets
0 physical reads
0 redo size
407 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> alter tabletest_eat_memory storage(buffer_pool recycle);
SQL>insert intotest_eat_memory select rpad('1',4000,'1'), rpad('2',4000,'2'), rpad('3',4000,'3'),rpad('4',4000,'4'),rpad ('5',4000,'5'), rpad('6',4000,'6'), rpad('7',4000,'7'),rpad('8',4000,'8'), rpad('9' ,4000,'9'), rpad('0',4000,'0 ) from all_objectswhere rownum<=15000;   --插入15000行数据
统计信息
10410 recursive calls
564195 db block gets
108584 consistent gets
620 physical reads
637527688 redo size --大约插入了638M数据
678 bytes sent via SQL*Net to client
803 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
91 sorts (memory)
0 sorts (disk)
15000 rows processed
SQL> commit;
SQL> select * fromtest_default;
统计信息
70 recursive calls
0 db block gets
0 consistent gets
12 physical reads
0 redo size
407 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
2 sorts (memory)
0 sorts (disk)
rows processed
在这个样例中。将进行批操作的表改为recycle池。在批操作运行完毕后,发现 test_default表的数据仍然能够在default池中找到。
这样的方法屏蔽了批操作对系统的影响。

小结
对于大多数的系统而言,使用 default池就够了。
可是假设内存空间相对较小,或者对系统中表的使用情况有比較清晰的认识,则能够通过配置 keep池和 recycle池来细化内存的分配。提高数据缓冲区的命中率,减少批操作对系统的影响。
尽管 keep池、recycle池用来缓存不同类型的数据。可是他们的机制是同样的。他们採用的都是LRU算法。假设keep池分配的内存不足,那么也会有部分数据被清除出内存;假设 recycle池的内存分配足够,也能够保证当中的数据所有缓存。从本质上讲。 keep池和 recycle池并没有什么差别,仅仅是名字不同而已。
假设给 keep池或者 recycle池分配的内存大小不合适,不但不会提高性能,并且会造成性能的下降。以 keep池为例。内存分配小了。这些常常被訪问的、数据就会有部分被清除出内存。导致命中率降低。假设内存分配过大。则导致 default池内存要对应的降低,default池不仅包含用户部分数据。并且也包含数据字典的缓冲。
因此。 default池内存的不足。必定导致整个系统性能的下降。并且,因为真实环境中,全部的表的大小都处于变化之中,因此,须要常常对不同缓冲区的命中率进行检查,并随时调整缓冲区的大小以满足数据不断变化的须要。
l 重做日志快速缓存
&sup2; 重做日志快速缓存大小由初始化參数LOG_BUFFER指定,能够在执行期间改动该參数。
&sup2; 工作原理:为了加快訪问速度和工作效率,重做记录并不直接写入重做日志文件里,而是首先从数据快速缓存写入重做日志快速缓存。
当重做日志快速缓存中的重做记录达到一定数量或某个时间点时,再由LGWR进程分批写入重做日志文件里(即ORACLE 总是先日志后文件或先内存后磁盘)。
因为重做日志文件是循环使用的。所以当重做日志文件切换时,还会由ARCn(假设启用了归档日志模式)进程将即将要被覆盖的重做日志文件里的数据写入到归档日志文件里,作为备份。         
SHOWPARAMETER LOG_BUFFER;   ------查询重做日志缓存的大小
SELECT* FROM V$SYSSTAT;         ------查询用户进程等待重做日志缓存的次数。
l 共享池
&sup2; 共享池由初始化參数SHARED_POOL_SIZE指定,默认80MB。能够在执行期间手动改动该參数。
&sup2; 共享池中保存了近期运行的SQL语句、PL/SQL过程与包、数据字典信息、锁、以及其它控制结构的信息。共享池是对SQL语句、PL/SQL程序进行语法分析、编译、运行的内存区。共享池又分为两部分:
n 数据字典缓存
ü 数据字典缓存用于存储常常使用的数据字典信息。比方:表的定义、username、口令、权限、数据库的结构等。

ü Oracle执行过程中常常訪问该缓存以便解析SQL语句,确定操作的对象是否存在,是否具有权限等。假设不在数据字典缓存中。server进程就从保存数据字典信息的数据文件里将其读入到数据字典缓存中。
数据字典缓存中保存的是一条一条的记录(就像是内存中的数据库)。而其它缓存区中保存的是数据块信息。

n 库缓存
ü 库缓存大小与OPEN_CURSOR初始化參数相关,ORACLE中每条查询语句都须要打开一个游标。OPEN_CURSOR默认值为300。
ü 库缓存的目的就是保存近期解析过的SQL语句、PL/SQL过程和包。
这样一来。Oracle在运行一条SQL语句、一段PL/SQL 过程和包之前。首先在“库缓存”中搜索。假设查到它们已经解析过了,就利用“库缓存”中解析结果和运行计划来运行。而不必又一次对它们进行解析,显著提高运行速度和工作效率。
&sup2; Oracle长期执行后,共享池可能出现碎片,这时能够用下面语句清除共享池内的所有数据:alter system flush shared_pool;
&sup2; 实验与案例
n 验证数据块缓存和共享池的作用
1.   用sys登陆sqlplus,运行统计用户表空间个数的语句。

SQL>conn / as sysdba
SQL>set timing on
SQL>select count(*) from user_tablespaces;
因为是第一次运行该查询,须要将外存的user_tablespaces信息读入数据块缓存并对其进行解析,再把解析结果存储到共享池的库缓存中,所以用时较多。
2.   第二次运行该查询。
因为不须要读外存,且sql语句运行计划在内存中,不须要硬解析,速度较快。
SQL>select count(*) from user_tablespaces;
3.   清空共享池,第三次运行。因为清除了共享池。须要又一次解析sql语句,但所需数据还在数据库块缓存中,所以用时介于两者之间。
SQL>select count(*) from user_tablespaces;
n 缓存命中率
ü 逻辑读(LogicalReads):即从缓存中读取数据。
ü 物理读(PhysicalReads):即从物理磁盘上读取数据。

SQL>select statistic#, name, value from v$sysstat where name in ('physical reads', 'dbblock gets', 'consistent gets')
说明:v$sysstat是用来动态跟踪系统性能參数的数据字典表。
查询和计算命中率有关的三个数据库行,各自是physical reads, db block gets, consistent gets。当中db block gets和 consistentgets的value值相加数据值为全部读的总次数。逻辑读次数为总和减去physical reads的value值。命中率为:逻辑读次数/全部读的总次数。
l 大池
&sup2; 由初始化參数LARGE_POOL_SIZE确定大小。能够使用ALTER SYSTEM语句来动态改变大池的大小。
&sup2; 大池是可选项的,DBA能够依据实际业务须要来决定是否在SGA区中创建大池。假设创建,将会自己主动的被各种各样的进程拿来使用。本来这些进程是使用共享池的内存。假设没有创建大池,则须要大量内存空间的操作将占用共享池的内存。
&sup2; ORACLE 须要大力内存的操作有:  
A、数据库备份和恢复。   
B、具有大量排序操作的SQL语句。
C、并行化的数据库操作。                    
l JAVA池
&sup2; 由初始化參数JAVA_POOL_SIZE确定大小,控制在30-50MB比較合适。

&sup2; 用户存放JAVA代码、JAVA语句的语法分析表、JAVA语句的运行方案和进行JAVA程序开发。

&sup2; 能够使用ALTER SYSTEM SET JAVA_POOL_SIZE=0M SCOPE=SPFILE;调整其大小。语句在server初始化參数文件里改动该參数。必须又一次启动数据库server才干使其生效。
修改oracle SGA,以提高oracle性能





在正常情况下,查询非常慢。
1、检查SGA大小,以DBA身份连接到oracle数据库,输入show sga。
2、如果SGA过小,请修改其大小
修改SGA必须保持的原则:
1).sga_target不能大于sga_max_size,可以设置为相等。
2).SGA加上PGA等其他进程占用的内存总数必须小于操作系统的物理内存。
做如下操作前,必须备份dbs目录下的所有文件。
方法一:直接SQL命令行修改:
(如果spfile文件不存在,需先创建create spfile from pfile;)
SQL>alter system set sga_max_size=1024m scope=spfile;
然后需要重启数据库
SQL>shutdown immediate
SQL>startup
SQL>show sga;即可看到SGA的大小已经被修改
重启之后,再修改sga_target
SQL>alter system set sga_target=1024m scope=both;




方法二:通过EM修改:
以SYS登陆到EM:管理->(数据库配置)所有初始化参数—>SPFile->在此界面可以直接定义sga_target与sga_max_size
然后重启数据库即可





unto爱商机B2B网用什么广告软件可以全自动发布next勤发网广告信息群发软件用哪个比较好用呢
回复

使用道具 举报

20

主题

2263

帖子

4129

积分

积分
4129
信息发布软件沙发
发表于 2017-9-12 17:35:04 | 只看该作者
真的一直在配合我

回复 支持 反对

使用道具 举报

0

主题

648

帖子

632

积分

积分
632
推广工具板凳
发表于 2017-9-13 08:39:48 | 只看该作者
做网站的亲们:辛苦了,你们做事情认真负责,反应快速,你们就是现在少有的良心卖家,在这个比较扯蛋的商业环境,你们还这么出污泥而不染,难能可贵。加油笨蛋们

回复 支持 反对

使用道具 举报

0

主题

660

帖子

660

积分

积分
660
软件定制开发地板
发表于 2017-9-13 21:52:35 | 只看该作者
。。。。。。。。很好。。。。。。。。。

回复 支持 反对

使用道具 举报

0

主题

1002

帖子

1010

积分

积分
1010
5#定制软件#
发表于 2017-9-17 10:29:48 | 只看该作者
后天管理很好用

回复 支持 反对

使用道具 举报

2

主题

650

帖子

652

积分

积分
652
6#定制软件#
发表于 2017-9-20 11:47:13 | 只看该作者
好人品,生意兴隆,都是5分

回复 支持 反对

使用道具 举报

0

主题

614

帖子

596

积分

积分
596
7#定制软件#
发表于 2017-9-21 05:28:23 | 只看该作者
。很热情,不错的商家

回复 支持 反对

使用道具 举报

0

主题

632

帖子

628

积分

积分
628
8#定制软件#
发表于 2017-9-23 07:17:02 | 只看该作者
很强大的团队,很负责,分工明确,开始有接待的,然后制作后台,技术服务很到位,刚开始由于我个人和售前沟通有些不明白的,技术细心给予指导,针对我的情况推荐升级版本,现在我的公司执照正在办理,相信在微巨宝团队的管理下我们的事业能走到更远。做事情不能着急,相信过几天大家一定能看到我的图片,期待中....

回复 支持 反对

使用道具 举报

0

主题

1026

帖子

1111

积分

积分
1111
9#定制软件#
发表于 2017-9-25 11:20:04 | 只看该作者
笨蛋,1号,19号,7号,077号,5号解决问题好

回复 支持 反对

使用道具 举报

0

主题

652

帖子

646

积分

积分
646
10#定制软件#
发表于 2017-9-25 13:05:35 | 只看该作者
懂的问客服都会一一解答,挺好用的,还在熟悉中

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关导读
信息发布软件AIWROK软件自定义Activity页面背景图片
AIWROK软件自定义Activity页面背景图片 [*]var ac = new activity();:这行代码创建了一个新的Activity对象。Activity是Android应用的基本构建块之一,通常代表一个单一的屏幕。 [*]ac.loadXML(...):这里通过加载一段XML布局代码来初始化Activity的布局。XML布局代码描述了用户界面的结构和外观。在这个例子中,使用了一个垂直方向的LinearLayout作为根布局,其中包含一个Button。 [*]var view = ac.findViewById("bg"):
信息发布软件opencv原生模板找图转座标方法
这段代码是使用OpenCV库进行图像匹配的JavaScript代码示例。它的主要功能是在一个较大的图像中查找一个小图像的位置。以下是代码的详细说明: [*]导入OpenCV库: [*]importClass(org.opencv.imgproc.Imgproc):导入图像处理类Imgproc,该类包含了图像模板匹配的方法。 [*]importClass(org.opencv.imgcodecs.Imgcodecs):导入图像编码解码类Imgcodecs,该类用于读取和写入图像文件,以及将字节数组转换为Mat对象。 [*]impor
信息发布软件hui动态生成复选框显示所有app
// 官方QQ群 711841924function getChcek1() { var check1 = { id: "check_c16291c6", type: "check", style: { width: "300", height: "auto", position: "absolute", top: 122, left: 103, right: "", bottom: "", borderWidth: "0", borderColor: "", borderStyle: "none",
信息发布软件AIWROK软件随机范围点击随机范围拖动
AIWROK软件随机范围点击随机范围拖动 1. 随机位置点击[/backcolor] 函数 [*]功能:在指定的百分比坐标附近随机点击。 [*]参数: [*]x[/backcolor]:点击位置的百分比 X 坐标。 [*]y[/backcolor]:点击位置的百分比 Y 坐标。 [*]x范围[/backcolor]:X 坐标的随机范围。 [*]y范围[/backcolor]:Y 坐标的随机范围。 [*]实现: [*]首先将百分比坐标转换为实际屏幕坐标。 [*]然后在指定范围内生成新的随机坐标。 [
信息发布软件AIWROK软件里的PaddLeOCR里的OCR
这里有第一种方法:这里带第二种方法:
信息发布软件AIWROK软件YOLO找色判断两个页面是否一样
这段代码常用于自动化测试、监控屏幕内容变化或者实现某些特定的自动化操作,比如在等待某个界面加载完成时,通过检测特定区域的颜色变化来判断页面是否已经加载完毕。// 获取当前屏幕的全屏截图,并保存为/sdcard/1.jpg var img = screen.screenShotFull(); img.save('/sdcard/1.jpg'); // 获取截图中某个特定点的RGB值(此处坐标为屏幕宽度的82.2%,屏幕高度的64.27%) var rgb = img.getPointRGB(0.822, 0.6427);
信息发布软件在AIWROK软件中loadDex 加载插件
说明:可以使用安卓studio 开发出apk,jar,或者dex使用此方法加载模块,注意:插件直接放到插件文件夹中然后上传到手机英文方法: loadDex(plugin),加载插件到系统参数:plugin:插件名称例如导入的插件为 p1.dex,则参数名就填写 loadPlugin(‘p1.dex’)案例://导入dex模块 rhino.loadDex('p1.dex') //导入apk模块 rhino.loadDex('demo.apk')importClass 导入插件中的类方法说明:通过这个方法可以导入插件里编写好的类英文方法:imp
信息发布软件rhino犀牛Java交互AIWROK应用
Java交互简介:AutoApp 提供了 Java交互API,比如导入Java包、类。1.如何让java代码转成js代码例如:我们想要通过java代码获取手机的像素javaDisplayMetrics dm = context.getResources().getDisplayMetrics(); int screenWidth = dm.widthPixels; int screenHeight = dm.heightPixels;在js代码中变量不需要声明,比如 dm是一个 DisplayMetrics类型 js中直接使用 let 或者 var即可js代码var dm = context.getResources().getDisplay
信息发布软件HID如何开启节点功能呢?
HID如何开启节点功能呢?第一步,HID 连接上好后,灯是快闪的,连上了才可以节点,这要注意一下,打开 APP 图标点击一下打开这个侧栏图标,弹出左边这个主软件界面,这里有很多功能,如下图所示: 第二步是点开 HID 硬件这个按钮侧栏,要 3.36 才有这个功能的,以前的版本没有,这个也要 168 个人会员以上才能用的功能,这个 APP 最新的版本 3.38 可以对部分的自绘界面进行节点操作,有的不规则面页是比较难有节点出现的,有部分
信息发布软件AIWORK软件获取当前所有线程指定停止
getAllThreads 函数用于获取当前Java虚拟机中所有活动线程的信息。它通过获取当前线程的线程组,然后不断向上遍历,直到找到根线程组。接着,利用 enumerate 方法将所有线程枚举到一个数组中,并返回这个数组。 getThreadNames 函数调用 getAllThreads 函数获取所有线程对象后,使用 map 方法提取每个线程的名称,形成一个新的数组并返回。这个数组包含了所有活动线程的名称。 stopThread 函数用于尝试终止指定名称的线程。它
信息发布软件苹果IOS配置读写怎么实现的呢?
// 创建一个单选按钮组,用于管理性别选择的单选按钮let rg = new RadioButtonGroup();// 从配置中获取性别值,如果配置中没有性别值,则默认为空字符串let sexvalue = config.getConfig("sex", "");// 创建一个输入框,用于用户输入其他信息(例如用户名)let user = new Input();// 创建一个单选按钮,表示男性选项let nan = new RadioButton();nan.setText("男"); // 设置单选按钮的文本为“男”if (sexvalue === "男") { na
信息发布软件okHttp实例判断一下网址打不开的方法
// 创建 okHttp 实例var http = new okHttp();http.setHeader("User-Agent", "Mozilla/5.0");var url = "http://www.baidu.com/";try { printl("开始发送 GET 请求到: " + url); var result = http.get(url); printl("请求完成,响应对象: " + JSON.stringify(result)); // 打印完整的响应对象 if (result && result.code !== undefined) { printl("请求成功,状态码: " + result.code); if (result
信息发布软件AIWROK软件内容匹配 match()函数用来查找字符串中特定的字符
内容匹配 match()函数用来查找字符串中特定的字符function findSubstringInString(mainStr, pattern) { // 使用 match() 查找给定的模式 var result = mainStr.match(pattern); if (result !== null) { // 如果找到了匹配项,则返回匹配的结果 return "Match found: " + result[0]; } else { // 如果没有找到匹配项,则返回相应的消息 return "No match found."; }}// 定义字符串和要
信息发布软件&#127800;用AIWROK软件游戏选项执行不选择项随机执行怎么弄?
🌸用AIWROK软件游戏选项执行不选择项随机执行怎么弄?// 群号711841924function 游戏选项执行(易玩游戏选择) { // 随机选择一个元素 var 随机索引 = Math.floor(Math.random() * 易玩游戏选择.length); var 随机字符 = 易玩游戏选择[随机索引]; // 检查易玩游戏选择和随机字符的组合,执行相应游戏 if (易玩游戏选择.indexOf('美女泡泡大战') !== -1 && 随机字符 === '美女泡泡大战') { printl('
信息发布软件实用型多线程脚本运行20秒后停止
本帖最后由 信息发布软件 于 2025-5-15 06:28 编辑 var threads = [];function 计划任务(函数, 运行时间){    var t = new thread();    threads.push(t);    t.runJsCode( () => {        函数();    }, "计划任务")    sleep.second(运行时间);    t.stop();}function 脚本1(){    while(true){     &n
信息发布软件分享苹果UI里的AIWROK一个完整的界面
分享苹果UI里的AIWROK一个完整的界面// 群号711841924// 创建 TabViewvar tab = new TabView();// 设置标签页标题tab.setTitles(["首页", "第二页", "第三页", "第四页"]);// 显示 TabView,并在加载完成后执行回调函数tab.show(() => { printl("TabView 显示完成"); // 添加每个标签页的视图 tab.addView(0, h1()); // 首页 tab.addView(1, h2()); // 第二页 tab.addView(2, h3()); // 第三页 tab.addView(3,
信息发布软件AIWROK软件手机短信采集按需采集
/* 这个是获取手机短信的例子, 最近很多人用AIWORK怎么获取短信验证码,这样就不用去打开,然后一点一点的采集了。 其实AIwork是有很便捷的方式进验证码采集的,比如下面这段,按时间排序的短信验证码,这样就可以采集出验证码, 并且可以全部输入数字出来,有哪位朋友需要这段代码的请加群或是加我Q获取这段现成的代码。 下面是AIWORK演示代码操作:*/// 定义一个函数,用于读取最新的短信function readLatestSms() { //
信息发布软件HID键鼠其它功能设备如关充电开充电息屏亮屏
hid.keyPress(0,keycode.A());//在光标后面输入aa//方法1hid.keyPress(0,keycode.Enter());//亮屏//方法2hid.keyPress(0,0x07);//唤醒屏亮屏hid.keyPress(0,0x66);//息屏,关屏键盘设备Android 支持各种键盘设备,包括特殊功能小键盘(音量和电源控制),紧凑型嵌入式 QWERTY 键盘和全能型 PC 式外接键盘。本文档仅介绍物理键盘。有关软键盘(输入法编辑器)的信息,请参阅 Android SDK。键盘分类只要满足以下任一条件,输入设备即
信息发布软件AIWROK软件定义手势路径构造函数
AIWROK软件定义手势路径构造函数// 定义手势路径构造函数function GesturePath() { this.points = []; this.duration = 0;}// 设置持续时间的方法GesturePath.prototype.setDurTime = function(duration) { this.duration = duration;};// 添加点的方法GesturePath.prototype.addPoint = function(x, y) { this.points.push({ x: x, y: y });};// 定义多手指手势构造函数function MultiFingerGesture() { this.fing
信息发布软件用AIWROK软件排除打叉关闭区域并让它点击我想点的关闭怎么弄?
function 点击区域跳过检测(left, top, right, bottom) { var leftPercent = left; var topPercent = top; var rightPercent = right; var bottomPercent = bottom; // 获取屏幕的宽度和高度 var screenWidth = screen.getScreenWidth(); var screenHeight = screen.getScreenHeight(); // 计算矩形区域的坐标 var x1 = screenWidth * leftPercent; var y1 = screenHeight * topPercent; var x2
群发软件AIWROK软件生成随机时间函数妙用技术方法
/** * 生成随机时间函数 * @returns {string} 格式为HH:MM:SS的随机时间字符串 */function 随机时间() { // 生成随机小时、分钟和秒数 var hours = Math.floor(Math.random() * 24); var minutes = Math.floor(Math.random() * 60); var seconds = Math.floor(Math.random() * 60); // 格式化时间为两位数 hours = hours < 10 ? '0' + hours : hours; minutes = minutes < 10 ? '0' + minutes : minutes;
群发软件AIWROK软件如何使用webview 实现 h5界面ui
var web = new WebView()web.show();web.loadHtml(`<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>WKWebView JS to Swift</title> <style> body { font-family: -apple-system, BlinkMacSystemFont, sans-serif; padding: 40px; background-color: #f2f2f7; text-align: center; } button {
群发软件AIWROK软件如何训练自己的数据集
通用yolo模型aiwork平台提供了通用yolov5插件,可以自行下载开源训练库或者把你已经训练好的yolov5模型转成.tflite格式即可使用调用案例:复制var yolo=new yoloV5(); //可以自己配置是否gpu加速和int8量化 yolo.loadTFMode("/插件/fp16_320.tflite","/插件/YoloV5.txt",320,false,false,false); //或者简写 //yolo.loadTFMode("/插件/fp16_320.tflite","/插件/YoloV5.txt",640); //本地图片识别 var img=new image().readT
群发软件AIWROK常用的随机位置范围点击随机拖动
/* * 随机位置点击函数 * @param {number} x - 点击位置的百分比 X 坐标 * @param {number} y - 点击位置的百分比 Y 坐标 * @param {number} x范围 - X 坐标的随机范围 * @param {number} y范围 - Y 坐标的随机范围 */function 随机位置点击(x, y, x范围, y范围) { // 将百分比坐标转成真实坐标 var x1 = screen.percentToWidth(x); var y1 = screen.percentToHeight(y); // 在指定范围内生成新的随机坐标 x1 = ran
群发软件AIWROK软件FTP完整例子自动链接可以上传可以下载
AIWROK软件FTP完整例子自动链接可以上传可以下载/* 欢迎使用AiWork安卓自动化IDE qq群: 711841924 */// 加载FTP库rhino.loadDex(project.getResourcesPath() + "ftp.dex");importClass(org.apache.commons.net.ftp.FTP);importClass(org.apache.commons.net.ftp.FTPClient);importPackage(java.io);// FTP配置参数var ftpHost = "154.201.80.249";var ftpPort = 21;var username = "rtyerye";var password = "8AafKDs4KhMDR3yy
群发软件AIWROK真正能包打天下的三种查找随机方法
AIWROK真正能包打天下的三种查找随机方法// 图片文字识别相关方法// 使用opencv的OCR进行文字识别并随机点击function 找字随机点击() { var ocr = opencv.OCREx('今日头条极速版8.cv'); if(!ocr) return; var target = ocr.findIncludeText('今日头条极速版'); if(target) { var rect = target.rect; var screenWidth = screen.getScreenWidth(); var screenHeight = screen.getScreenHeight
群发软件AIWROK软件技巧分享图片二值化封装使用
AIWROK软件技巧分享图片二值化封装使用// 引入 Android 和 OpenCV 的类importPackage(org.opencv.core);importPackage(org.opencv.imgproc);importPackage(org.opencv.android);importClass(android.graphics.Bitmap);function screenshotAndBinarize(width, height, quality, threshold1, threshold2) { // 进行屏幕截图 var bitmap = screen.screenShot(width, height, quality).getBitmap(); // 将 Bitmap 转换为 Open
群发软件AIWROK软件安卓自动化auto__小结方法总汇集
第一个:back按下回退键auto.back();这个代码示例展示了如何调用一个名为 back() 的函数来返回上一页或执行某种“返回”操作。例子:function demoExample() { // 打印信息表明即将返回上一页 printl("即将返回上一页"); // 使用 auto.back() 返回上一页 auto.back(); } // 调用示例函数 demoExample();代码说明:function demoExample() { ... }:定义了一个名为 demoExample 的函数,该函数没有参数。printl("
群发软件floatUI自定义极度美化悬浮窗
/* 欢迎使用AiWork安卓自动化IDE 帮助文档: http://help.autoapp.net.cn 官方地址: www.aiwork24.com qq群: 743723025*/ // 定义一个名为悬浮窗的构造函数function 悬浮窗() {}// 创建一个悬浮窗实例var float = new 悬浮窗()// 定义一个全局变量用于控制停止状态var 全局_停止 = false// 为悬浮窗构造函数的原型添加create方法,用于创建悬浮窗界面悬浮窗.prototype.create = function () { // 创建一个floatUI实例,f
群发软件AIWROK软件agent代理模式ADB方法集合
第一个例子:开启代理模式判断agent.start()agent.start() 函数用于开启代理模式,需 root 权限,无需参数。此函数执行后会返回一个布尔值:如果成功返回 true,否则返回 false。下面是一个可能的使用例子:// 尝试启动代理模式 let result =agent.start(); printl(result); if (result) { console.log("代理启动成功!"); } else { console.log("代理启动失败,请检查是否具有root权限。"); }此代码尝试启动代理模式,
群发软件用在AIWORK软件代码中的实用符号分类整理
var 任务进行中 = true;var 倒计时已启动 = false;var 任务三已执行 = false;var 任务一定时器, 任务二定时器;function 任务一() { print.log("🚀▶️ 准备执行任务一"); // 使用您的环境专用输出 function 执行任务一() { if (!任务进行中) { clearTimeout(任务一定时器); return; } print.log("✅🔁 任务一执行中..."); 任务一定时器 =
群发软件AIWROK多线程方法UI线程对象方法
AIWROK多线程方法UI线程对象方法名称new thread()作用多线程方法权限root键鼠无障碍语法new thread()参数类型是/否说明线程对象对象是创建一个线程对象返回类型是/否说明对象/对象成功对象失败函数线程对象方法类型是/否说明.runJsCode(fun, name )函数/字符是fun 执行的函数name 执行线程名称返回类型是/否说明无无成功失败文件线程对象方法类型是/否说明. runJsFile (js, name )字符是js 执行的js文件name 执行线程名称返回类型
群发软件AIWROK软件常用数组方法小结汇集方法
/* 官方交流群号711841924 *//* 安卓手机 Android 和Rhino1.7.13 和ES5 JavaScript环境 */var 数组 = {};// 1. 元素升序(小到大)数组.元素升序 = function(arr) { try { if (!Array.isArray(arr)) throw new Error("需要数组"); return arr.slice().sort(function(a,b){return a-b;}); } catch(e) { printl("[错误] "+e.message); return null; }};// 2. 元素降序(大到小) 数组.元素降
群发软件AIWROK软件多线程thread1.runJsFile例子
本帖最后由 群发软件 于 2025-4-15 09:24 编辑 T = time.nowStamp();// 正确启动两个线程(线程名必须不同!)var thread1 = new thread(); // 线程对象1var thread2 = new thread(); // 线程对象2thread1.runJsFile('线程1.js', 'worker1'); // 线程名用"worker1" thread2.runJsFile('线程2.js', 'worker2'); // 线程名用"worker2"// 监控循环(10秒后停止线程1)while (true) { printl("正常运行"); sleep.millisecon
群发软件AIWROK软件支持的Java标准库和Android SDK库
特别是针对Android开发时导入的各种类。这些类分别属于Java标准库和Android SDK库,用于处理不同的功能需求。下面是对这些代码的详细说明://java类//importClass(java.math.Session);//importClass(java.math.Transport);//importClass(java.math.BigInteger);//importClass(java.math.internet.MimeMessage);importClass(java.sql.Connection);importClass(java.sql.DriverManager);importClass(java.sql.ResultSet);importClass
群发软件AIWROK软件thread使用全局变量控制线程状态
AIWROK软件thread使用全局变量控制线程状态// 安卓手机 Android 和Rhino1.7.13 和ES5 JavaScript环境// Android 环境 Rhinoceros 引擎与 JavaScript 的多线程示例{ // 使用全局变量控制线程状态 var shouldStop = false; // 创建一个 Java 的 Thread 对象 var runnable = new java.lang.Runnable({ run: function() { var count = 0; while (!shouldStop) {
群发软件AIWROK软件HID点击方法的方法集合小结
// 点击坐标// boolean click(int x, int y) 返回值: boolean// 参数: int x: 横坐标 int y: 纵坐标// 案例: hid.click(0, 0)hid.click(0, 0)// 点击百分比坐标// void clickPercent(double arg0, double arg1) 返回值: void// 参数: double arg0: 横坐标 double arg1: 纵坐标// 案例: hid.clickPercent(0, 0)hid.clickPercent(0, 0)// 连续点击// boolean clicks(int x, int y, int times, int delay) 返回值: boolean// 参数: in
群发软件AIWROK软件常用OKHTTP方法小结汇集
群发软件AIWROK软件字符方法集合小结
//字符.分割字符/** * 字符串分割工具模块 - 修正版 * 最后更新:2025-04-02 */var 字符 = { /** * 字符串分割方法 * @param {string} str 要分割的字符串 * @param {string} divide 分隔符 * @returns {Array|null} 分割后的数组或null(错误时) */ 分割字符: function(str, divide) { try { if (typeof str !== 'string') return null; if (typeof divide !== 'string')
群发软件AIWROK软件数学方法集合小结
/** * //适用本文档ES5系统安卓 JavaScript引擎Rhino * 数学方法全集 * 运行环境: Android + Rhino 1.7.13 + ES5 */// 定义数学对象var 数学 = {};/** * 二为底的e的对数 * @setting ROOT 代理激活 无障碍 键鼠硬件 * @returns {number} 返回二为底的e的对数 */数学.__二为底的e的对数 = function() { return Math.LOG2E;};/** * 二的平方根 * @setting ROOT 代理激活 无障碍 键鼠硬件 * @returns {number} 返回二的平方根 */数
群发软件AIWROK软件应用方法集合小结
// 应用管理工具集const 应用 = {};// 模拟日志函数const LOG = { info: function(msg) { printl(' ' + msg); }, err: function(msg) { printl('[ERROR] ' + msg); }};/** * 停止当前脚本 */应用.停止脚本 = function () { try { LOG.info("尝试停止脚本..."); if (typeof runtime !== 'undefined' && runtime.exit) { LOG.info("使用runtime.exit()停止脚本"); runtime.exit();
群发软件AIWROK软件常见正则方法集合小结
//适用本文档ES5系统安卓 JavaScript引擎Rhinoconst 字符 = { /** * 匹配查找字符串中的内容 * @param {string} str 需要查找的字符串 * @param {string|RegExp} searchvalue 需要查找的字符串或正则表达式 * @returns {Array|null} 成功:返回包含匹配结果的数组,失败:返回null * @example * // 示例1:查找字符串 * var str = "How are you doing you today?"; * var fgh = 字符.匹配查找(str
群发软件AIWORK类语聊智能聊天机器人带意图识别例子演示
类语聊智能聊天机器人带意图识别例子演示 飞桨智能聊天机器人集成指南示例代码转换为实际可用的智能聊天机器人应用。1. 代码结构说明当前代码包含两个主要模块:HTTP工具模块提供基础的HTTP请求功能,用于与飞桨API进行通信: [*]HTTP工具.创建请求() - 创建HTTP请求实例 [*]HTTP工具.设置请求头(http, headers) - 设置HTTP请求头 [*]HTTP工具.POST请求(url, data, headers) - 发送POST请求并处理响应 智能聊天机器人模块实现
群发软件AIWROK软件时间方法集合小结
AIWROK软件时间方法集合小结//适用本文档ES5系统安卓 JavaScript引擎Rhinoconst 时间 = { /** * 获取当前时间戳 * @returns {number} 返回当前的时间戳(毫秒) * @example * var timestamp = 时间.当前时间戳(); * printl(timestamp); // 输出类似: 1677649423000 */ 当前时间戳: function() { return Date.now(); }, /** * 格式化时间为指定格式 * @param {Date|number|str
群发软件IOS苹果TabView视图和Horizontal水平布局控件
IOS苹果TabView视图和Horizontal水平布局控件 导航条视图模式可以支持多个页面标签切换案例:创建TAB视图显示视图function show(function fun)参数 func :ui显示以后调用的方法设置tabtab.setTitles(["首页", "关于", "我的"])//关闭视图tab.dismiss()添加子视图tab.addView(tabindex,view)参数tabindex:tab的序号从0开始参数 view:子视图案例Horizontal水平布局控件用于横向放置多个控件案例:
群发软件苹果熟悉layout线性布局和IOS苹果View视图
本帖最后由 群发软件 于 2025-3-27 07:34 编辑 线性布局是垂直或者水平布局类似网格 水平布局 比如就是一行可以放多个控件文本框:按钮:单选框:复选框类似上面这样一行可以放多个控件的就是水平布局垂直布局就是一行只能放一个元素文本框按钮单选复选混合布局,就是水平和垂直嵌套就可以实现复杂的界面例如一个登录界面,先创建一个垂直布局 ,每个垂直布局的每一行再放一个水平布局用户名————————密码————————
群发软件AIWROK软件生成椭圆曲线手势
这段代码定义了一些用于生成和执行贝塞尔曲线手势的函数。具体来说,代码分为以下几个部分: 1随机数生成函数: 这个函数 random(a, b) 使用 rand.randNumber(a, b) 来生成一个在 a 到 b 之间的随机数。不过,在完整的代码中,rand.randNumber 需要是一个已定义的函数或库方法。 2椭圆曲线点生成器: 函数 generateEllipticPoints(a, b, xStart, xEnd, step) 用于根据椭圆曲线的参数 a 和 b,在指定的 x 范围内生成一系列的点。
群发软件AIWROK软件屏幕自动化操作方法汇集
代码的简要说明和一些注意事项: [*]MLKitOcr 文字识别: [*]代码中使用了 MLKitOcr 方法来进行文字识别。'zhs' 和 'zh' 都是中文的识别代码,但通常使用 'zh'。 [*]识别结果通过 getAllString() 方法获取,然后打印出来。 [*]使用完截图后,记得调用 recycle() 方法来释放资源。 [*]截图并压缩: [*]使用 screenShot 方法可以指定截图的尺寸和压缩质量。 [*]检查截图是否成功后再进行后续操作。 [*]计算面
群发软件苹果IOS在IDE中配置AIWork直播插件的详细图文教程
在IDE中配置AIWork直播插件的详细图文教程以下是关于在集成开发环境(IDE)中配置AIWork直播插件的详细步骤说明,帮助您顺利完成设置。第一步:安装IDE1. 下载并安装IDE· 下载安装包:访问官方网站或可信来源下载最新版本的IDE安装包。· 安装步骤:a. 双击安装包文件,按照提示完成安装。b. 安装完成后,重启计算机以确保环境变量生效。· 验证安装:打开IDE,检查是否能正常运行,确保所有组
群发软件AIwok软件苹果IOS手机初始化设置和IOS HTTP接口
配置要求:IDE AIWORK >3.25手机 >= iphone6sIOS版本 >=IOS15(ios15不支持画中画日志,16以上支持)苹果HID硬件必须设置:自动息屏:必须关闭,不然截屏权限会自动关闭蓝牙:必须打开辅助触控:必须打开 (设置->辅助功能->触控->辅助触控->打开)软件安装1.下载tf并安装https://testflight.apple.com/join/1sVURYPb或者扫二维码下载 安装完tf以后 再安装aiwork初始化第一步 硬件连接手机,选择硬件第二步 开启辅助触
群发软件AIWROK软件多线程协作示例代码解析
AIWROK软件多线程协作示例代码解析 详细说明 [*]线程对象创建 [*]使用new thread()创建两个独立线程对象 [*]dataThread用于数据处理,logThread用于日志记录 [*]每个线程有独立的执行上下文和生命周期 [*]数据生成线程 [*]通过runJsCode方法执行匿名函数 [*]使用for循环生成1-5的序列数据 [*]java.lang.Thread.sleep(1000)实现1秒间隔(Rhino引擎特性) [*]线程命名为"数据线程"便于调试识别 [*]日志记录线程
群发软件AiWork软件下载蓝奏云OCR文件到文件夹
这段代码是一个用于从蓝奏云(Lanzou)下载文件的自动化工具脚本,主要基于JavaScript编写,并且是在一个安卓自动化环境中运行的,例如使用AiWork这样的自动化IDE。代码中定义了一个主要的函数downloadLanzouFile,它接受三个参数:文件的URL地址url,保存文件的路径saveFilePath,以及最大重试次数maxRetries(如果未提供,函数默认设置为5次)。代码的主要功能和步骤如下: [*]初始化和配置: [*]定义了蓝奏云的备用域
群发软件setTimeout__方法异步延迟加载函数
这段代码定义了一个简单的任务链,模拟了一个从数据查询到数据处理再到数据保存的流程。代码中使用了runTime.setTimeout来模拟每个任务的执行耗时。以下是代码的详细说明: [*]taskOne函数:这是第一个任务,负责开始数据查询。 [*]使用printl函数打印一条消息,表示任务一即将开始。 [*]使用runTime.setTimeout函数来模拟数据查询的过程,设置的延迟时间为3秒(3000毫秒)。 [*]在3秒后,生成一个模拟数据字符串"查
群发软件floatUI悬浮窗 实用示例合集
floatUI悬浮窗 实用示例合集如何使用 floatUI 创建不同的 UI 组件,并为它们设置点击事件。每个示例都展示了不同的 UI 布局和事件处理逻辑。示例 1: 创建一个带有多个按钮的垂直布局,并为每个按钮设置不同的点击事件var f1 = new floatUI(); f1.loadSXML(` <vertical> <button text="按钮1" id="button1"/> <button text="按钮2" id="button2"/> <button text="按钮3"
群发软件AIWROK软件找图__方法小汇集
方法一:定义图像查找函数 [*]功能:在指定的查找区域内查找与模板图像相似度达到设定值的目标,并自动点击该目标的中心位置。 [*]参数: [*]searchRegion:查找区域的相对坐标,格式为 [x1, y1, x2, y2],其中 (x1, y1) 是左上角坐标,(x2, y2) 是右下角坐标。 [*]templateImage:模板图像的Base64编码字符串。 [*]similarity:相似度阈值,用于判断是否匹配。 [*]流程: [*]获取屏幕截图并转换为Mat格
群发软件awirok软件找色__方法小汇集
群发软件AIWORK 软件全功能 OCR 查找区域功能代码示例
    // 第一个示例:获取屏幕截图并进行 OCR 文字识别(简体中文)var img1 = screen.screenShotFull();var ocr1 = img1.MLKitOcr('zhs');var text1 = ocr1.getAllString();printl(text1);img1.recycle();/*说明:- 这是一个最基本的 OCR 示例。- 使用 MLKitOcr 方法通过简体中文词库识别截图中的文字。- 最终输出识别到的全文本信息。*/// 第二个示例:指定区域内的 OCR 文字识别(中文)var img2 = screen.s
群发软件AiWROK软件里的OpenCV图片分辨率压缩和质量压缩
// 导入必要的Android和OpenCV类importClass(android.graphics.Bitmap);importClass(java.io.File);importClass(org.opencv.core.Core);importClass(org.opencv.core.Mat);importClass(org.opencv.core.Size);importClass(org.opencv.imgproc.Imgproc);// 全屏截图var img = screen.screenShotFull();if (img.isNull()) {printl("截图失败");exit();}// 原始图片信息var originalPath = "/sdcard/original.jpg";img.save(originalP
群发软件定时任务示例:使用 setInterval 和 clearInterval 实现多种功能
1. 倒计时功能var countdownTime = 10; var countdownInterval; function updateCountdown() { if (countdownTime > 0) { console.log("剩余时间: " + countdownTime + "秒"); countdownTime--; } else { clearInterval(countdownInterval); console.log("倒计时结束!"); } }用法启动:startCountdown()停止:stopCountdown()应用场景游戏倒计时、会议提醒、考试计时、烹饪计时等。2. 实时时
群发软件AIWORK软件将数组↔互转字符串
AIWORK软件将数组↔互转字符串1.方法将数组转换为字符串// 定义函数function myFunction() {// 定义一个包含水果名称的数组var fruits = ["Banana", "Orange", "Apple", "Mango"];console.log("原始数组: ", fruits);// 使用 toString 方法将数组转换为字符串var str = fruits.toString();console.log("转换后的字符串: ", str);// 返回转换后的字符串return str;}// 调用函数var result = myFunction();2. 将数组互转字符串/
群发软件Boolean对象构造AIWROK函数深度解析
本类目代码集合:  //第一个,boolean.constructor_函数的引用 // 创建布尔对象 var myBool = new Boolean(true); // 访问构造函数 printl(myBool.constructor); // 输出: function Boolean() { [native code] } // 确认构造函数的类型 printl(myBool.constructor === Boolean); // 输出: true //第二个,boolean.toString___布尔转字符 // 创建一个 Boolean 对象 var boolTrue = new Boolean(true); v
群发软件AIWROK软件随机时间和随机倒计时用法技巧分享
群发软件安卓自动化[auto]大集合第一部
安卓自动化[auto]大集合第一部第一个:back按下回退键auto.back();这个代码示例展示了如何调用一个名为 back() 的函数来返回上一页或执行某种“返回”操作。例子:function demoExample() { // 打印信息表明即将返回上一页 printl("即将返回上一页"); // 使用 auto.back() 返回上一页 auto.back(); } // 调用示例函数 demoExample(); 代码说明:function demoExample() { ... }:定义了一个名
群发软件AIWROK软件随机位置范围点击和范围随机拖动
   /* * 随机位置点击函数 * @param {number} x - 点击位置的百分比 X 坐标 * @param {number} y - 点击位置的百分比 Y 坐标 * @param {number} x范围 - X 坐标的随机范围 * @param {number} y范围 - Y 坐标的随机范围 */ function 随机位置点击(x, y, x范围, y范围) { // 将百分比坐标转成真实坐标 var x1 = screen.percentToWidth(x); var y1 = screen.percentToHeight(y); /
群发软件AIWORK软件FTP完整例子自动链接可以上传可以下载
AIWORK软件FTP完整例子自动链接可以上传可以下载/* 欢迎使用AiWork安卓自动化IDE 帮助文档: http://help.autoapp.net.cn 官方地址: www.aiwork24.com qq群: 743723025 */ // 加载FTP库 // 通过rhino.loadDex方法加载名为"ftp.dex"的Java库文件,该文件包含了用于FTP操作的类 rhino.loadDex(project.getResourcesPath() + "ftp.dex"); // 导入所需的FTP操作类和Java IO包 importClass(org.apache.common

QQ|( 京ICP备09078825号 )

本网站信息发布软件,是可以发布论坛,发送信息到各大博客,各大b2b软件自动发布,好不夸张的说:只要手工能发在电脑打开IE能发的网站,用这个宣传软件就可以仿制动作,进行推送发到您想发送的B2B网站或是信息发布平台上,不管是后台,还是前台,都可以进行最方便的广告发布,这个广告发布软件,可以按月购买,还可以试用软件,对网站的验证码也可以完全自动对信息发布,让客户自动找上门,使企业轻松实现b2b发布,这个信息发布软件,均是本站原创正版开发,拥有正版的血统,想要新功能,欢迎提意见给我,一好的分类信息群发软件在手,舍我其谁。QQ896757558

GMT+8, 2025-6-6 05:57 , Processed in 0.165698 second(s), 55 queries .

宣传软件--信息发布软件--b2b软件广告发布软件

快速回复 返回顶部 返回列表