Oracle自带的网络工具(计算传输redo需要的带宽,使用STATSPACK,计算redo压缩率,db_ultra_safe)

本文主要是介绍Oracle自带的网络工具(计算传输redo需要的带宽,使用STATSPACK,计算redo压缩率,db_ultra_safe),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

oracle自带的网络工具


--根据primary database redo产生的速率,计算传输redo需要的带宽.
除去tcp/ip网络其余30%的开销,计算需要的带宽公式:
需求带宽=((每秒产生redo的速率峰值/0.75)*8)/1,000,000=带宽(Mbps)

=========================================================================
--可以通过去多次业务高峰期的Statspack/AWR获取每秒产生redo的速率峰值,也可以通过查询视图:
SQL> select * from v$sysmetric_history where metric_name = 'Redo Generated Per Sec';

oracle 11.1.0.4以上版本,可以采用MOS提供的 oratcptest 工具测量网络能力,10g版本可采用可靠的第三方软件计算实际的带宽。
oracle 11.1.0.4以上版本,可以采用MOS提供的 oratcptest 工具测量网络能力,10g版本可采用可靠的第三方软件计算实际的带宽。
oracle 11.1.0.4以上版本,可以采用MOS提供的 oratcptest 工具测量网络能力,10g版本可采用可靠的第三方软件计算实际的带宽。

=========================================================================

--参考MOS文档:
Note:2064368.1 -  Measuring Network Capacity using oratcptest
然后通过与传输redo需求的带宽值作比较,如果带宽不足,则需要扩容.

=========================================================================
--Redo压缩传输:
Oracle Data Guard从11g开始,增加了redo压缩传输的特性,redo压缩传输是Oracle高级压缩选项的一个特性,需要额外的license支持.
在Oracle11g之前的版本中,压缩传输redo可以通过第三方的WAN加速器实现,如Cisco,Riverbed,F5等

=========================================================================
--redo压缩传输,有以下的益处:
1).减少redo传输延迟。
2).减少网络利用率。
3).提供更快的redo gap解决方案。
4).减少redo传输时间。

=========================================================================
--redo压缩最大的益处是低网络带宽环境archeving recovery point ojectives(PRO),适用场景:
1).primary redo产生的速率大于可用的网络带宽。
2).执行压缩需要足够的CPU资源。

在高网络带宽环境中,可能由于压缩传输redo,CPU消耗将增加。
如,gap解决测试显示,在OC1(51.8Mbits/sec)和T3(44.7Mits/sec)网络环境中,50%的CPU消耗在ARCH进程压缩操作上,而在100Mbits的网络环境中,每个ARCH进程均消耗全部的CPU。
在高于100Mbits的网络中,不建议使用redo压缩.如果需要优先采用PRO减少网络使用率,则一定要评估测试。

从oracle11.2开始,设置log_archive_dest_n参数的compression=enable属性启用redo压缩传输,包括sync,async,arch传输模式,gap解决,所有的dg保护模式均会采用压缩.
Oracle11.1中,设定log_archive_dest_n参数的compression属性,仅适用于解决gap时的redo压缩传输,设定隐含参数(_redo_transport_compress_all)启用最大性能模式下的async和arch传输模式的redo压缩传输.


=========================================================================
--启用redo压缩传输:
--Oracle11.1:
alter system set "_redo_transport_compress_all"=true scope=spfile sid='*';

log_archive_dest_2='service=standby async compression=enable ...'

--Oracle 11.2:
log_archive_dest_2='service=standby async compression=enable ...'


=========================================================================
--计算redo压缩率:
redo压缩类似于gzip -1.手工压缩归档日志,通过gzip --list命令查看压缩率.
gzip工具使用1.3.3之后版本.
gzip -1 <archivelog>.arc
gzip --list <archivelog.arc>.gz


=========================================================================
--坏块保护与性能影响
具体需要设定什么级别的坏块保护,需要在测试环境进行详细的测试,根据需求设定.


=========================================================================
--db_block_checksum
参数决定DBWn和直接加载在写磁盘时根据存储在快中的所有字节计算一个checksum并存储到每个数据块和redo log 的cache层头部.Checksum用来校验块是否是底层disk,存储系统或I/O子系统引起的物理损坏.
当DB_BLOCK_CHECKSUM=FULL时,如果checksum校验失败,Oracle从磁盘(或其他实例)读该块时将应用需要的redo尝试对它进行修复.
如果块损坏,将抛出ORA-600,ORA-01578错误并记录到数据库或ASM的alert log中.

Checksum不校验块内容的逻辑一致性.Checksum校验发生在内存中当一个进程读取数据或redo块到SGA/PGA时,在写更新的、新的数据或redo块前,计算一个新的checksum.

db_block_checksum潜在的客户端包括:所有的foregrounds,DBWR,LGWR,LNS,RFS,ARCH,MRP和recovery slaves.

--参数设定:
- OFF/FALSE:当设置为OFF时,DBWn仅对SYSTEM表空间计算checksums,不对用户表空间计算checksum,也不会记录checksum.
- TYPICAL/TRUE:默认值,读块时计算checksum并和块头存储之进行比较,块被读入内存修改后,checksum=0,在修改结束后,DBWn计算一个新的checksum并存储到块头,然后写缓存到磁盘中.
- FULL:TYPICAL增强,Oracle在update/delete语句执行前校验checksum,在LGWR执行剩余的工作时重新计算一个新值.在Oracle11g之前,LGWR仅执行log block checksum,在写磁盘前校验每一个前台进程产生的log块.
- 最佳实践中,在primary和standby中设置DB_BLOCK_CHECKSUM=ALL,需要4%--5%的系统开销;OLTP中设定为TYPICAL需要1%--2%的额外开销,对Redo Apply性能影响最小,但也带来更少的块保护.测试显示在primary设置DB_BLOCK_CHECKSUM=FULL会带来不可接受的性能影响,考虑性能与保护,在primary设定DB_BLOCK_CHECKSUM=TYPICAL,在standby设置DB_BLOCK_CHECKSUM=FULL(在主备角色转换后,设定也会改变)


=========================================================================
--db_block_checking
参数指定Oracle是否对块执行logical intra-block检查(内存中语义检查).检查块内容,包括块头和用户数据,预防在内存中发生损坏的改变块写入磁盘.通过块上的数据做块的完整性逻辑校验,确保块自身的一致性.当DB_BLOCK_CHECKING=MEDIUM/FULL时,在内存中检测到坏块时将会通过读取磁盘上好的块副本或者应用需要的redo自动修复坏块.如果坏块不能修复,将抛出ORA-600/ORA-01578并阻止写数据块.

--参数设定:
- OFF/FALSE:默认值,仅对SYSTEM表空间块做语义检查,对用户表空间不做块检查.
- LOW:块内容在内存中被修改后(如UPDATE/INSERT,on-disk读,RAC inter-instance块转移),做基本的块头检查.LOW级别不执行任何数据层的检查,对保护块损坏检查作用有限.
- MEDIUM:除索引外的所有对象做LOW级别的检查和全部的语义检查,索引可以通过重建减少索引块损坏.
- FULL/TRUE:对所有对象做LOW和MEDIUM级别的检查和语义检查,包括索引.

Oracle建议在primary和standby均设定DB_BLOCK_CHECKING=FULL.需要测试能否接受FULL级别带来的性能影响,如果不能,设定DB_BLOCK_CHECKING=MEDIUM.系统需要在每次块改变花费额外的开销,一般需要1%--10%的额外开销,在UPDATE和INSERT频繁的应用场景中(如Standby Redo Apply)开销更大.OLTP中的频繁的更新压缩表也需要额外的开销.

基于对性能和数据保护的考虑,可以在primary设定DB_BLOCK_CHECKING=MEDIUM,当primary设定此参数后,primary引入块首尾校验,在standby端便没有必要设定DB_BLOCK_CHECKING来检测primary数据库的讹误,但Oracle仍然建议启用该参数,原因:
·确保standby转换为primary角色后有正确的设定.
·启用参数开启standby不依赖于primary的再次逻辑损坏校验

=========================================================================
db_lost_write_protect
检测丢失写,丢失写发生在I/O子系统确认块写的完整性或旧的块版本的覆盖写时,发现丢失写时,写操作不会持续到存储.

--参数设定:
- NONE:默认值,不启用丢失写保护.
- TYPICAL:Primary端设定DB_LOST_WRITE_PROTECT=TYPICAL时,在执行介质恢复时读取redo log中的read-write表空间到log buffer cache,检测写丢失.在物理standby中设定DB_LOST_WRITE_PROTECT=TYPIAL,DG的MRP进程将会持续检查出现在primary数据库read-write表空间的丢失写,检测到丢失写时,将立即阻止应用损坏的redo log块,也做不依赖于primary的丢失写保护检测.
-FULL:TYPICAL增强,对read-write,read-only表空间均启用丢失写保护检测.

当DG MRP进程检测到primary的丢失写损坏,MRP进程将会停止,standby跑出ORA-752错误.DG物理standby检测到其他类型的损坏时也会停止redo应用,跑出ORA-600[3020]错误.更多关于物理standby ORA-752和ORA-600[3020]错误及修复参考MOS文档1265884.1.

启用DB_LOST_WRITE_PROTECT参数将带来额外的开销,在更新频繁的环境中,redo增加,standby应用redo时,需要额外的IO开销检测写丢失.在大多数的场景中,写保护带来的影响可以忽略,最好的方法就是在生产环境启用该参数时先经过测试环境的测试.

11.2.0.4开始,DG Broker配置丢失写保护允许用户选择primary继续或者关闭.

=========================================================================
--db_ultra_safe
11.2新增参数.

--参数设定:
- OFF: 不影响DB_BLOCK_CHECKING, DB_BLOCK_CHECKSUM, DB_LOST_WRITE_PROTECT参数单独的设定.
- DATA_ONLY:将做以下设定:
db_block_checksum=full
db_block_checking=medium
db_lost_write_protect=typical

=========================================================================
--DATA_AND_INDEX:将做以下设定:
db_block_checksum=full
db_block_checking=full
db_lost_write_protect=typical

=========================================================================
根据DG坏块保护章节Oracle建议的设定,也可仅设定 db_ultra_safe 参数.

等待事件
--ARCH属性等待事件
ARCH wait on ATTACH

--监控ARCH进程生成RFS连接花费的总时间
ARCH wait on SENDREQ

--监控远程已接收到的redo被ARCH进程从打开到关闭磁盘写花费的总时间
ARCH wait on DETACH

--监控ARCH进程删除RFS连接花费的总时间
LGWR SYNC属性等待事件
LGWR wait on ATTACH

--监控LGWR进程生成RFS连接花费的总时间
LGWR wait on SENDREQ

--监控远程已接收到的redo被LGWR进程从打开到关闭磁盘写花费的总时间
LGWR wait on DETACH

--监控LGWR进程删除RFS连接花费的总时间
LGWR ASYNC属性等待事件
LNS wait on ATTACH

--监控LNS进程生成RFS连接花费的总时间
LNS wait on SENDREQ

--监控远程已接收到的redo被LNS进程从打开到关闭磁盘写花费的总时间
LNS wait on DETACH

--监控LNS进程删除RFS连接花费的总
LGWR wait on full LNS buffer

--监控LGWR进程等待LNS释放ASYNC buffer空间花费的总时间.
如果buffer空间在合理的时间内没有被释放,最高可用primary将不允许ARCn进程传输redo log data.等待事件与LGWR SYNC=PARALLEL属性无关.
LGWR ASYNC/LGWR SYNC=PARALLEL属性等待事件
LGWR wait on LNS

--监控LGWR进程等待接受network server KSR通道信息花费的总时间.
LNS wait on LGWR

--监控network server等待接受LGWR进程KSR通道信息花费的总时间.
LGWR-LNS wait on channel

--监控LGWR进程或者network server 进程等待接受KSR通道信息花费的总时间.
ACTIVE DATA GUATD使用STATSPACK

从Oracle11.1开始,使用Active Data Guard,在主库可以使用statspack收集处于read-only和恢复中的standby database性能数据.

=========================================================================
--使用STATSPACK
1.--安装Statspack
在安装standby statspack之前,perfstat schema和statspack相关对象必须存在于primary和standby.如果没有,则在primary执行以下脚本创建perfstat schema:
SQL> conn /as sysdba
SQL> @?/rdbms/admin/spcreate.sql

Choose the PERFSTAT user''s password

-----------------------------------

Not specifying a password will result in the installation FAILING

Enter value for perfstat_password: oracle  <====输入密码

oracle

Choose the Default tablespace for the PERFSTAT user

---------------------------------------------------

Below is the list of online tablespaces in this database which can

store user data.  Specifying the SYSTEM tablespace for the user's

default tablespace will result in the installation FAILING, as

using SYSTEM for performance data is not supported.

Choose the PERFSTAT users's default tablespace.This is the tablespace

in which the STATSPACK tables and indexes will be created.

TABLESPACE_NAME                CONTENTS  STATSPACK DEFAULT TABLESPACE
------------------------------ --------- ----------------------------
SYSAUX                         PERMANENT *
USERS                          PERMANENT

Pressing will result in STATSPACK''s recommended default

tablespace (identified by *) being used.

Enter value for default_tablespace:   <====使用SYSAUX作为perfstat的默认表空间

Using tablespace SYSAUX as PERFSTAT default tablespace.

Choose the Temporary tablespace for the PERFSTAT user

-----------------------------------------------------
Below is the list of online tablespaces in this database which can

store temporary data (e.g. for sort workareas).Specifying the SYSTEM

tablespace for the user's temporary tablespace will result in the

installation FAILING, as using SYSTEM for workareas is not supported.

Choose the PERFSTAT user's Temporary tablespace.

TABLESPACE_NAME                CONTENTS  DB DEFAULT TEMP TABLESPACE
------------------------------ --------- --------------------------
TEMP                           TEMPORARY *

Pressing will result in the database''s default Temporary

tablespace (identified by *) being used.

Enter value for temporary_tablespace:   <====使用TEMP作为perfstat的临时表空间

Using tablespace TEMP as PERFSTAT temporary tablespace.

... Creating PERFSTAT user

... Installing required packages

... Creating views

... Granting privileges

NOTE:
SPCUSR complete. Please check spcusr.lis for any errors.

SQL>
SQL> --
SQL> --  Build the tables and synonyms
SQL> connect perfstat/&&perfstat_password
Connected.

SQL> @@spctab  <====调用spctab脚本创建一系列表和同义词

...

NOTE:

SPCTAB complete. Please check spctab.lis for any errors.

SQL> --  Create the statistics Package
SQL> @@spcpkg  <---调用spcpkg脚本创建统计包

...

NOTE:
SPCPKG complete. Please check spcpkg.lis for any errors.

在primary执行sbcreate.sql脚本创建standby statspack schema用来保留standby snapshots,创建stdbyperf用户,调用sbaddins.sql添加第一个standby实例到配置中:
SQL> conn /as sysdba
SQL> @?/rdbms/admin/sbcreate.sql

...
SQL> --  Create user and required privileges
SQL> @@sbcusr  <====调用sbuser脚本创建用户并赋予权限

Choose the STDBYPERF user''s password

-----------------------------------
Not specifying a password will result in the installation FAILING

Enter value for stdbyuser_password: oracle  <====输入stdbyuser用户密码

oracle

Choose the Default tablespace for the STDBYPERF user

---------------------------------------------------
Below is the list of online tablespaces in this database which can

store user data.  Specifying the SYSTEM tablespace for the user''s

default tablespace will result in the installation FAILING, as

using SYSTEM for performance data is not supported.

Choose the STDBYPERF users''s default tablespace.This is the tablespace

in which the STATSPACK tables and indexes will be created.

TABLESPACE_NAME                CONTENTS  STATSPACK DEFAULT TABLESPACE
------------------------------ --------- ----------------------------
SYSAUX                         PERMANENT *
USERS                          PERMANENT

Pressing will result in STATSPACK''s recommended default

tablespace (identified by *) being used.

Enter value for default_tablespace:   <====使用SYSAUX作为stdbyuser的默认表空间

Using tablespace SYSAUX as STDBYPERF default tablespace.

Choose the Temporary tablespace for the STDBYPERF user

-----------------------------------------------------
Below is the list of online tablespaces in this database which can

store temporary data (e.g. for sort workareas).  Specifying the SYSTEM

tablespace for the user''s temporary tablespace will result in the

installation FAILING, as using SYSTEM for workareas is not supported.

Choose the STDBYPERF user''s Temporary tablespace.

TABLESPACE_NAME                CONTENTS  DB DEFAULT TEMP TABLESPACE

------------------------------ --------- --------------------------
TEMP                           TEMPORARY *

Pressing will result in the database''s default Temporary

tablespace (identified by *) being used.

Enter value for temporary_tablespace:   <====使用TEMP作为stdbyuser的默认表空间

Using tablespace TEMP as STDBYPERF temporary tablespace.

... Creating STDBYPERF user

... Installing required packages

... Granting privileges

NOTE:

SBCUSR complete. Please check sbcusr.lis for any errors.
SQL>

SQL> connect stdbyperf/&&stdbyuser_password
Connected.

SQL>

SQL> --

SQL> --  Build the tables

SQL> @@sbctab      <====调用sbctab脚本创建一些列的表

...

NOTE:

SBCTAB complete. Please check sbctab.lis for any errors.

SQL> --  Add a standby database instance to the configuration

SQL> @@sbaddins  <====调用sbaddins脚本添加第一个实例到配置中

...

THE INSTANCE YOU ARE GOING TO ADD MUST BE ACCESSIBLE AND OPEN READ ONLY

Do you want to continue (y/n) ?

Enter value for key: y  <====输入y开始添加

You entered: y


Enter the TNS ALIAS that connects to the standby database instance

-----------------------------------------------------------------
Make sure the alias connects to only one instance (without load balancing).

Enter value for tns_alias: STANDBY   <====输入一个standby database的TNS-Alias

You entered: STANDBY

Enter the PERFSTAT user''s password of the standby database

---------------------------------------------------------
Performance data will be fetched from the standby database via

database link. We will connect to user PERFSTAT.

Enter value for perfstat_password: oracle  <====输入perfstat用户密码

You entered: oracle

... Creating database link

... Selecting database unique name

Database

------------------------------

standby

... Selecting instance name

Instance

------------
standby

... Creating package

Creating Package STATSPACK_standby_standby..  <====创建STATSPACK_standby_standby包
No errors.

Creating Package Body STATSPACK_standby_standby..
No errors.

NOTE:
SBCPKG complete. Please check sbcpkg.lis for any errors.

2.--添加实例到Statspack配置中
用stdbyperf用户登陆primary 数据库并执行sbaddins.sql添加standby 实例到statspack配置中.
SQL> conn stdbyperf/oracle
SQL> @?/rdbms/admin/sbaddins.sql

过程类似于第一步调用sbaddins.sql.

3.--收集standby实例的性能数据
用stdbyperf用户登录primary数据库创建snapshot并收集standby性能数据.
SQL> conn stdbyperf/oracle
SQL> exec statspack_standby_standby.snap;


4.--生成standby统计报告
SQL> @?/rdbms/admin/sbreport.sql


5.--清除standby snapshot集
SQL> @?/rdbms/admin/sbpurge.sql


6.--从statspack配置中删除standby实例
SQL> @?/rdbms/admin/sbdelins.sql

7.--删除Statspack Schema
SQL> conn /as sysdba
SQL> @?/rdbms/admin/sbdrop.sql

=========================================================================
--standby statspack相关脚本简短说明:
--以下脚本位于$ORACLE_HOME/rdbms/admin目录下:
sbcreate.sql : 安装standby statspack
sbcuser.sql : 被sbcreate.sql调用创建schema
sbctab.sql : 被sbcreate.sql调用创建保留snapshots的表
sbaddins.sql : 被sbcreate.sql调用添加standby实例到statspack配置中或直接执行用来添加standby实例到statspack配置中
sbcpkg.sql : 被sbaddins.sql调用创建实例指定的statspack包
sblisins.sql : 列出statspack配置中的standby实例
sbreport.sql : 创建standby统计报告
sbrepcon.sql : 被sbreport.sql调用获得报告配置
sbrepins.sql : 被sbreport.sql调用创建真实的报告
sbpurge.sql : 清除指定ID范围的snapshot集
sbdelins.sql : 从statspack配置中删除standby实例
 

这篇关于Oracle自带的网络工具(计算传输redo需要的带宽,使用STATSPACK,计算redo压缩率,db_ultra_safe)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/773361

相关文章

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传