转载声明: 本文为DBA+社群原创文章,转载必须连同本订阅号二维码全文转载,并注明作者名字及来源:DBA+社群(dbaplus)。
Oracle 的优化工具很是丰富,大家基本都会常用到的awr,ash,addm自不必多说,还有大量的tuning包,可能在EM中去用感觉还方便一些,就是动动鼠 标,所见即所得,而且sql monitor作为11g的新特性,对于调优来说也是如虎添翼。但是作为前线的工程师们,总是会有各种环境的挑战,想用图形工具还是比较困难的,优化工具 虽好,但是使用起来如果不太方便,或者很多时候不能很快定位问题,就会让人感觉使不上劲,眉毛胡子一把抓。这也是我简单定制这些工具的一个动力。所谓磨刀 不误砍柴工,这些强大的工具简单包装一下,就会有不一样的效果来。我基本会从下面的几个方面来说明一下我所做过的简单定制。如果能够帮助到大家,我深感荣 幸。
目录
简单定制的思路
简单定制awr
简单定制ash
简单定制addm
简单定制OSM
如果说定制的思路,那么我目前是使用了SQL,shell和PL/SQL之间做转换或者互相调用来实现。不管怎么样,能够实现定制需求就行。
1.1 定制awr的动力
首 先来看看第一个优化工具AWR,大家在做性能问题诊断的时候,awr是不可或缺的工具,使用?/rdbms/admin/awrrpt.sql可能大家使 用的多了, 有时候感觉输入参数还是有些太繁琐了。一边复制,一边在一个快照列表中翻找对应的快照,其实还是不太方便。
比如我想查看某一周以前的早上8点到9点的快照,生成一个awr报告来对比现在的性能情况,那么我首先得算一下大概需要多少天的快照,然后从一个冗长的快照列表中去翻找需要的快照号, 快照列表类似下面的格式。
Instance DB Name Snap Id Snap Started Level
好不容易找到begin snap_id,拷贝完成,突然忘了看end snap_id,又得上下翻屏,其实,我只是想生成一个报告而已。
对于历史问题的分析如果经常需要找历史awr报告,这种情况就尤其痛苦,所以我决定改变这种状况。
1.2 awrrpt.sql报告内部的调用关系
我是从$ORACLE_HOME/rdbms/admin/awrrpt.sql开始分析的,其实这个脚本的调用关系如下图所示。
awrinput.sql 是做输入参数的校验的,
awrinpnm.sql 是做报告文件名处理的。
所以最关键的就是第三个脚本了。内容就是调用dbms_workload_repository的方法了。内容如下:
Select output from table(dbms_workload_repository.&fn_name( :dbid,:inst_num,:bid, :eid,:rpt_options ));
既然说要定制,就需要把这些参数都给拿下。
1.3 先定制快照,定制awr就会顺水推舟
于是我没有急于马上风风火火定制,而是发现其实我可以先定制一些历史快照的使用情况。
比如我想得到某天某个时间段的快照情况,那么我只需要简单输入对应的时间参数就可以马上得到一个快照列表了,根据需要随时调整也没问题。
比如我想知道2014年10月19日3点到8点的快照情况,输出应该类似下面的样式。
DB_NAME SNAP_ID SNAPDAT LVL
于是我写了脚本先实现这个功能,这样调用脚本 sh showsnap.sh 20141019 3 8
快照前后各宽裕一个小时,这样我就轻松的得到快照列表了。
我们在这个基础上更进一步,其实输出快照号的同时也可以同时输出DB time的情况,这是在定制后得到的DB time情况。
得 到的是快照点的对应的DB time,比如快照36343~36344,持续60分钟,DB time为85分钟,以此类推。得到这样的DB time列表,还是可以发现很多潜在的问题,可以充分结合awr来进行诊断,但是不足之处还是后知后觉,这部分功能可以进一步进行深化,先不做更多讨论。
可以这样运行脚本生成上面的结果 sh showsnap2.sh 20150827 5 10
showsnap2.sh这个脚本的实现思路主要是基于下面的几个数据字典。
由于定制前做了一些准备工作,所以定制AWR的时候就会更加灵活 。
1.4 定制awrrpt.sql
定制AWR的核心部分就是下面的这句。
select output from table(dbms_workload_repository.&fn_name( :dbid,:inst_num,:bid, :eid,:rpt_options ));
所以我定制的语句如下,使用print生成了参数列表,然后直接在dbms_workload_repository.awr_report_html一次性传入值,如果是text格式的,直接调用awr_report_text即可。
使用的语句如下:
print "
WHENEVER SQLERROR EXIT 5
SET FEEDBACK OFF
SET HEAD OFF
SET PAGES 0
connect ${DB_CONN_STR}@${SH_DB_SID}\n
select d.dbid||','||i.instance_number||','||$1||','||$2||',0' text
from v\$database d,
v\$instance i ;
" | sqlplus -s /nolog > awr_inputs.lst
sqlplus -s ${DB_CONN_STR}@${SH_DB_SID} <
set pages 0
set linesize 1500
set termout on;
spool awrrpt_$1_$2.lst
select output from table(dbms_workload_repository.awr_report_html( `cat awr_inputs.lst`));
spool off;
set termout off;
clear columns sql;
EOF
1.5 定制awrsqrpt.sql
如果awrrpt.sql完成了之后,还有一个福利就是awrsqrpt.sql,我们可以抓取到快照时间范围内sql的执行计划情况。 这个时候唯一需要补充参数就是sql_id,需要调用dbms_workload_repository.awr_sql_report_text就可以得到文本格式执行计划报告。
如果想得到html格式,就是dbms_workload_repository.awr_sql_report_html
这样调用即可 sh genawrsqltext.sh 12315 12316 xxxxx 其中xxxxx为sql_id
AWR的简单定制如此,ASH的部分也是如法炮制,所以整个分析的思路也是相似的。
核心步骤也是 dbms_workload_repository.ash_report_html。 当然主要差别在于ASH中是不依赖快照的,需要传入的参数为两个时间戳,精确到秒,比如20151208010000 20151208020000 就是12月8号的凌晨1点到2点的ASH需要的参数。
这样调用即可 sh genashhtml.sh 20151208010000 20151208020000 即可。
脚本主要内容如下:
select d.dbid||','||i.instance_number||',to_date('||chr(39)||$1||chr(39)||','||chr(39)||'yyyymmddHH24MISS'||chr(39)||'),to_date('||chr(39)||$2||chr(39)||','||chr(39)||'yyyymmddHH24MISS'||chr(39)||')' text from v\$database d, v\$instance i ;
select output from table(dbms_workload_repository.ash_report_html(`cat ash_inputs.lst`));
对 于ADDM而言,差别就比较大了。因为ADDM的部分涉及到pl/sql的一些方面,ADDM会调用dbms_advisor.create_task生 成一个任务,通过dbms_advisor.set_task_parameter来设置一些参数属性,然后通过 dbms_advisor.execute_task来执行任务,最后通过 dbms_advisor.get_task_report(‘$TASK_NAME’,‘TEXT’,‘TYPICAL’)来输出最终的报告。
当然ADDM的部分还是和快照相关,调用的方法类似下面的方式 sh genaddmhtml.sh 12315 12316 ,其中12315,12316是对应的快照号。
脚本主要内容如下:
dbms_output.put_line(task_name);
dbms_advisor.create_task('ADDM',task_name);
dbms_advisor.set_task_parameter(task_name, 'START_SNAPSHOT', $1);
dbms_advisor.set_task_parameter(task_name, 'END_SNAPSHOT', $2);
dbms_advisor.execute_task(task_name);
end;
/
prompt
prompt Generating the ADDM report for this analysis ...
prompt
prompt
set long 1000000 pagesize 0 longchunksize 1000
column get_clob format a80
select dbms_advisor.get_task_report('$TASK_NAME', 'TEXT', 'TYPICAL')
from sys.dual;
5.1 OSM简介
在sql调优中,对于sql语句的实时监控显得尤为重要,如果某条sql语句的性能比较差。可能从前端的直观感觉就是执行时间比较长。
对于dba来说,可能关注的相关因素需要多一些。
1)可以通过top命令来监控sql的性能情况,查看cpu使用率较高的oracle process,然后通过查看session和process得绑定得到对应的session,然后得到对应的sql语句。
2) 如果已经过去了一段时间,而且在缓存中已经没有对应的sql语句了,可以通过awr得到一个大体的报告做分析,排查问题的大体范围,在这个基础上定位更精准的时间段,做一个ash。
3) 如果已经定位到sql_id了,想做进一步的分析,可以通过awrsqrpt来得到对应时间段的执行计划
对于执行计划的分析方式就更多了,但是oracle也提供了一些比较方便的功能集,你用或者不用,它就在那里。
一般对于执行时间超过5秒的sql语句,都会成为监控对象
如果想得到sql monitor报告也绝非难事,可以通过dbms_sqltune.report_sql_monitor的方式得到一个html报告。比如下面的小例子。
SELECT dbms_sqltune.report_sql_monitor(
任何性能瓶颈都会暴露在你的眼前,这种图形化的调优其实还是很不错的。在无法使用图形界面的环境,得到一个html报告绝对是一种很难得的福利。
5.2 OSM的改进点
但是有个问题就是比如某个sql语句造成的问题已经发生了一段时间,想查看之前的执行情况,v$sql_monitor基本上就无从得知了,因为数据已经被刷出去了。
这个时候想查看更多的信息就比较困难了,为了能够及时和准确的定位,我们可以借助sql_monitor在后台启用一个job不定时的去查找,把这部分数据给缓存起来,目前我是采用平面文件的形式。
整个流程图如下:
如果大半夜有性能问题但是不是很紧要的情况下,我希望一切都能很自然一些,我可以在工作时间更高效的处理。从我的实践来看,我是在一个指定的目录下每隔10分钟去查找一次性能sql,如果当天已经有生成报告就不重新生成了,这个是报告生成的频度控制。
每天上班之后,我可以调用脚本根据时间来过滤得到一个排行榜,Duration时间最长的语句肯定是需要重点关注的。
grep -A2 Duration *$DATE |grep s\<|sed 's/
//g'|sed 's/<\/td>//g'|sort -n -k2
结果不到一个多月,生成了 800个报告,这么多报告是好事,毕竟已经有了详细的报告和数据,但是如果一下子消化这么多的报告,肯定是有难度,而且没有很强的针对性,可能有些sql 在一个月中的几天才会运行。有些sql可能每天都会运行,有些可能就运行一次,很长时间不会再次运行,我们需要关注的就是那些运行频繁的问题sql语句。 SQL monitor的报告类似下面的格式。
-rw-r--r-- 1 prodbuser dba 277992 Jul 26 00:37 cjqdgd14xjwjm_rpt.lst_140726
看到这么多的报告都有点晕,不知道该从哪里开始查起。
ls -l *.lst* |awk '{print $9}'|awk -F_rpt.lst_ '{print "insert into issue_sql values('\''"$1 "'\'', " $2");"}' > issue_sql.sql
生成的sql语句类似下面的形式。
insert into issue_sql values('07aw4r5syzydx', 140818);
> scp issue_sql.sql [email protected] :~
然后就开始使用sql语句来分析了,先来一个大概的,看看哪些sql语句出现的频率最高。
SQL> select *from (select sql_id,count(*)cnt from issue_sql group by sql_id) order by cnt desc;
SQL_ID CNT
比如我们想看看八月份以来哪些sql语句执行频率最高,可以使用如下的方式:
SQL> select *from (select sql_id,count(*)cnt from issue_sql where sql_date like '1408%' group by sql_id) order by cnt desc;
SQL_ID CNT
5.3 高级开发语言定制,可行但谨行
对于语句的执行时间进行更细粒度的监控,如果没有图形工具的情况,手工分析还是不爽,如果会一些开发,可以继续定制。比如我采用Java语言尝试对sql的执行时间进行统计,可以生成一个时间曲线图。用Java是因为我只会用Java做一点点字符串处理的功能J。
要做这部分工作是因为总是在分析数据的时候没有一个整体的感觉,而且又没有图形界面可用,只好在字符界面里想点办法,这个没有大规模采用,也是因为本身有华而不实的成分,也算自娱自乐吧。
上面仅供自娱自乐,如果有完备的环境最好还是不要这么干。
总结
所以这些简单的定制,其实也会发现在一定程度上,我们可以让这些性能诊断工具更符合我们的口味。在不影响性能,能够大幅度提高问题处理水平的情况下,还是推荐按需定制。
当然我只是抛砖引玉,还有更多的优化工具,比如dbms_tune可以有更多定制,sqltrpt也是一个很容易被大家忽略的神器。
本篇文章需要的脚本小编已总结好,大家可以关注DBA+社群微信公众号: dbaplus ,只需回复 “脚本” 即可下载相关文档。
作者介绍:杨建荣
【DBA+社群】北京发起人
Oracle ACE-A,YEP成员,现就职于搜狐畅游,拥有6年以上的数据库开发和运维经验,曾任amdocs DBA,负责亚太电信运营商的数据业务支持,擅长电信数据业务,数据库迁移和性能调优。
拥有Oracle 10g OCP,OCM, MySQL OCP认证,对shell,java有一定的功底,曾在2015年数据库大会进行关于数据迁移和升级的主题分享,现在每天仍在孜孜不倦的进行技术分享,每天通过微信,技术博客共享,已连续坚持550多天。
小编精心为大家挑选了近日最受欢迎的几篇热文:
回复 001 ,看杨志洪《【职场心路】一个老DBA的自白》;
回复002 ,看丁俊的《【重磅干货】看了此文,Oracle SQL优化文章不必再看!》;
回复003 ,看胡怡文《PG,一道横跨oltp到olap的梦想之桥》;
回复004 ,看陈科《memcached&redis等分布式缓存的实现原理》 ;
回复005 ,看宋日杰《Oracle后台专家解决library cache锁争用的终极武器》 ;
回复006 ,看郑晓辉《存储和数据库不得不说的故事》 ;
回复007 ,看袁伟翔 《揭秘Oracle数据库truncate原理》;
回复008 ,看李海翔《MySQL优化案例:半连接(semi join)优化方式导致的查询性能低下》 ;
回复009 ,看丁启良《LINUX类主机JAVA应用程序占用CPU、内存过高分析手段》;
回复010 ,看徐桂林《以应用为中心的企业混合云管理》 。
关于DBA+社群
DBA+社群是全中国最大的涵盖各种数据库、中间件及架构师线条的微信社群!有100+专家发起人,建有15大城市微信群,6大专业产品群,多达10000+跨界DBA加入队伍。每天1个热议话题,每周2次线上技术分享,不定期线下聚会与原创专家团干货分享,更多精彩,欢迎关注dbaplus微信订阅号!
扫码关注
DBAplus社群
超越DBA圈子,连接的不仅仅是DBA
你可能感兴趣的:(立等可取:工具定制让Oracle优化变得更简单快捷)
由数据泄露引发业务崩塌的HTTP代理危险
彬彬醤
http 网络协议 网络 tcp/ip web安全 大数据 macos
HTTP代理作为跨地域访问的常用工具,被广泛应用于跨境电商、数据采集、内容访问等场景。然而,其明文传输特性与监管漏洞,正成为数据安全与业务稳定的隐形杀手。某跨境电商团队因使用廉价HTTP代理,导致500+账号被亚马逊封禁;某企业员工通过公共代理访问内部系统,引发数据泄露事故——这些案例揭示:不当使用HTTP代理,可能让便捷变成灾难。五大核心风险解析1.不安全的数据传输传统HTTP代理工作于OSI模
Winrar X64_V6.24_win10/win11
Malwolf
winrar
SW_WinRAR_W11_64_V6240_20231108R.zipwinrar解压工具,免费版,无需破解,也不是破解版的,国内硬件大厂提供的官方版本。
Fiddler中文版抓包工具在跨域与OAuth调试中的深度应用
2501_91600747
http udp https websocket 网络安全 网络协议 tcp/ip
跨域和OAuth授权流程一直是Web和移动开发中最容易踩坑的领域。复杂的CORS配置、重定向中的Token传递、授权码流程的跳转,以及多域名环境下的Cookie共享,常常让开发者陷入调试困境。此时,一款能够精准捕获、修改、重放请求的抓包工具显得至关重要,而Fiddler抓包工具正是解决此类难题的核心武器。Fiddler中文网(https://telerik.com.cn/)为跨域和OAuth接入场
Fiddler抓包工具在多端调试中的实战应用:结合Postman与Charles构建调试工作流
2501_91600747
http udp https websocket 网络安全 网络协议 tcp/ip
在如今前后端分离、接口驱动开发逐渐成为主流的背景下,开发者越来越依赖于各类调试工具,以应对复杂的网络请求管理、多设备调试和跨团队协作等问题。而在诸多网络分析工具中,Fiddler抓包工具以其功能全面、扩展灵活、支持HTTPS抓包和断点调试等特性,在开发者圈中拥有稳定的口碑。本文将从一个更贴近日常开发流程的角度,探讨如何在多端调试、接口测试、数据模拟等环节中,灵活运用Fiddler,并与Postma
移动端iOS调试与问题解决:WebView调试多工具协作
游戏开发爱好者8
http udp https websocket 网络安全 网络协议 tcp/ip
在开发过程中,调试工作不仅仅是前端开发者的职责。当出现复杂的线上问题,调试往往需要涉及到多个团队的协作:前端、后端、测试和运营等。尤其是在移动端WebView页面和原生页面混合开发中,调试工作通常是多部门之间的互动与配合。这篇文章分享了我们在一个社交平台项目中的调试实践,重点讲解了跨团队合作调试中的问题解决策略,并介绍了我们如何通过工具协同与有效沟通,解决了上线后部分用户出现的问题。背景:移动端W
iOS 抓包工具排查接口时区异常:国际化产品调试实战分享
2501_91600747
http udp https websocket 网络安全 网络协议 tcp/ip
在开发面向全球用户的应用时,“时间”这个维度的处理远比预期复杂。近期在一个国际化版本中,我们遭遇了一个特殊问题:同一接口在不同国家用户手机上表现不一致,有时返回数据为空,有时返回过期内容。服务端逻辑看似正常,客户端日志也无报错,最终我们通过一套多工具组合的抓包流程,还原出隐藏在跨时区处理差异背后的根因。问题背景与初步症状该功能是一个活动弹窗判断接口:根据当前时间返回用户是否可见活动入口。接口响应结
iOS App 上架常见问题解决方案:六大难点与实战工具分工详解
游戏开发爱好者8
http udp https websocket 网络安全 网络协议 tcp/ip
作为一名主要负责移动端交付的工程师,iOS上架过程向来是开发周期中最容易“卡壳”的一环,特别是在跨平台项目、资源有限的团队中更为明显。在最近一个智能出行类App项目中,我们团队采用Flutter开发,最终要将成品应用发布至AppStore。在整个过程中,我们遇到了不少实际问题。本文将围绕“上架过程中最棘手的6个典型难点”,结合我们的解决方法和所用工具,进行一次全面复盘。难点一:没有Mac电脑,无法
iOS 远程调试与离线排查实战:构建非现场问题复现机制
HTTPwise
http udp https websocket 网络安全 网络协议 tcp/ip
iOS开发者都知道,调试最怕两个字:“偶发”。用户说App闪退了,你点了十遍也没问题;测试说功能卡顿了,你抓日志时它又顺滑如新。最麻烦的是,这种“现场问题”往往在你连接不到用户设备时发生。面对这种情况,我们团队过去一年逐渐搭建起一套以离线分析为核心的调试流程,即使设备不在身边,也能高效定位问题。本篇文章将围绕以下四类典型场景,拆解我们如何借助一套工具组合来解决:无法重现的崩溃问题用户侧偶发卡顿非越
C++正则表达式语法
Coding小公仔
c/c++ c++ 正则表达式 开发语言
在C++中,正则表达式是处理文本模式匹配和字符串操作的强大工具。C++11及以后的标准库提供了头文件,支持正则表达式的使用。下面是C++正则表达式的核心语法规则和用法:一、基本正则表达式语法1.普通字符直接匹配自身,例如:a匹配字符a。2.元字符(需转义)具有特殊含义的字符,需用反斜杠\转义(在C++字符串中需用双反斜杠\\)。.:匹配除换行符外的任意字符。^:匹配字符串的开头。$:匹配字符串的结
【iOS越狱开发】iOS越狱步骤1之环境搭建
JR_Wang2491
MAC 移动苹果 ios ios iphone ipad
这段时间都是研究iOS越狱事情,如今我会一点一点的把自己学到的遇到的问题会陆续编写出来,让大家一起讨论,也让做逆向的朋友有个交流平台机会,废话不多说!!一、学习条件至少1~2年iOS开发经验基本UI界面操作多线程网络基本操作数据储存基本操作一台苹果手机,建议至少iPhone5S(因为从5S开始支持arm64架构)或者至少是iPadAir、iPadmini2等支持arm64架构的设备系统至少iOS8
让一个程序在后台运行
Hi_kenyon
python linux 网络
PartI:如何让一个程序在后台运行,在关闭终端的时候,命令或者进行不会被中断在Linux上,如果你希望一个命令在后台持续运行,即使你关闭终端,它不会被终止,有几种常用的方法可以实现这个目的:方法一:使用nohupnohup(nohangup)命令可以让进程忽略挂起(HUP)信号,这样即使关闭终端也不会结束。nohupyour-command>output.log2>&1&your-command
Markdown编辑器 写文章方法
Joel Jin
笔记
Markdown编辑器欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Mar
python中的*args 和 **kwargs
Hi_kenyon
python python
简单来说,它们允许一个函数接收不定数量的参数。这在我们预先不知道会传递多少个参数给函数时非常有用。*args(任意数量的位置参数)*args用于在一个函数中接收任意数量的位置参数(positionalarguments)。当你在函数定义中使用*args时,Python会将所有传入的多余的位置参数收集到一个元组(tuple)中。这个名字args只是一个约定俗成的惯例(arguments的缩写),你也
MySQL主从备份
W111115_
MySQL mysql 数据库
前提条件:安装mysql,并开启二进制日志(bin-log日志)【让一台的bin-log日志传到另一台主机上,然后第二台主机收到后,将其bin-log日志读取并恢复到第二台机器上---整个过程实时操作同步】实现过程1.主从机器都开启二进制日志主服务器:vim/etc/my.cnf#编辑mysql配置文件log-bin=mysql-bin#开启二进制日志--------在配置文件中添加server-
iPhone越狱基本流程
王景程
github iphone xcode macos
目录一、什么是越狱(Jailbreak)?二、越狱前的准备工作三、越狱方式总览(按iOS版本划分)越狱类型:主流越狱工具一览:四、以Checkra1n为例讲解越狱流程(适合iPhoneX及更早)✅支持设备(iOS12–14):步骤:五、越狱后的操作(以Cydia为例)⚠️六、越狱风险与注意事项总结流程图:一、iPhone16+iOS26:是否可以越狱?当前情况(截至2025年中):二、为何新设备(
用 Python 开发文字冒险游戏:从零开始的教程
晓天天天向上
python microsoft 开发语言
文字冒险游戏(Text-basedAdventureGame)是一种经典的游戏类型,玩家通过输入文字指令与游戏世界互动。这种游戏不依赖复杂的图形界面,非常适合初学者学习编程逻辑和用户交互。在本篇博客中,我们将用Python开发一个简单的文字冒险游戏,体验游戏开发的乐趣。1.游戏设计思路游戏背景玩家醒来发现自己身处一个神秘的地下城,需要探索房间、收集物品、战胜敌人并找到出口。核心机制房间导航:玩家可
从零开始理解零样本学习:AI人工智能必学技术
AI天才研究院
Agentic AI 实战 AI人工智能与大数据 AI大模型企业级应用开发实战 ai
从零开始理解零样本学习:AI人工智能必学技术关键词:零样本学习、人工智能、机器学习、知识迁移、语义嵌入摘要:本文旨在全面深入地介绍零样本学习这一在人工智能领域具有重要意义的技术。首先阐述零样本学习的背景和基本概念,通过详细的解释和直观的示意图让读者建立起对零样本学习的初步认识。接着深入剖析其核心算法原理,结合Python代码进行详细说明,同时引入相关数学模型和公式并举例阐释。通过项目实战部分,带领
软件测试从业者必备的SQL知识
十二测试录
数据库 sql 数据库
作为职场人,学一门技能是用来解决日常工作问题的,没必要从头到尾把这块知识弄透,没那么多时间。基于此,十二根据自己的经验,把软件测试从业者需要掌握的SQL知识,整理如下;只要跟着这个顺序,从头到尾执行即可。前置准备事项:1、在自己电脑上安装一个mysql数据库,文章见->虚拟机Centos下安装Mysql完整过程(图文详解)_虚拟机安装mysql-CSDN博客2、找一个mysql客户端链接工具:初学
RPC:跨越代码与硅晶的“握手”——你每天都在用,却可能从未真正理解它
老马爱知
信息技术 #分布式计算 rpc 网络协议 网络 分布式系统 微服务 软件架构 硬核科普
——从本地调用的幻觉到服务万物的底座,解析这个支配云原生时代的隐形协议引言:一个程序员的日常困境想象一下这个场景:你正在构建一个电商系统。用户服务(管理用户信息)在一台服务器上,订单服务在另一台,而支付服务,则由远在天边的第三方提供。当一个用户下单时,订单服务需要先向用户服务确认用户身份,再调用支付服务完成扣款。这三个服务如同三座孤岛,如何让它们高效、优雅地对话?难道你要手动编写Socket连接,
初学翁凯老师的c语言后对其中一些问题的看法
Obltv
# 初学c语言 c语言
文章目录初学翁凯老师的c语言后对其中一些问题的看法一、一个课后的简单逻辑语法问题二、解答和一些思考1.**++i++--**2.**i++++**3.**a=b+=c++-d+--e/-f**问题初探原代码逻辑举例初次写博客的看法及感受初学翁凯老师的c语言后对其中一些问题的看法学习c语言已有数天,其中一些问题今日来看仍有研究价值,故记录探讨之一、一个课后的简单逻辑语法问题++i+±-i++++a=
Spring Batch :高效处理海量数据的利器
一叶飘零_sweeeet
Springboot spring boot
SpringBatch是Spring框架中一个功能强大的批处理框架,旨在帮助开发人员轻松处理大量数据的批量操作,比如数据的导入、导出、转换以及定期的数据清理等任务。它提供了一套完善且灵活的机制,使得原本复杂繁琐的数据批处理工作变得条理清晰、易于管理和扩展。接下来,我们将全方位深入探究SpringBatch,从其核心概念、架构组成,到具体的使用示例以及在不同场景下的应用优势等,带你充分领略它的魅力所
什么是 QueryGPT?智能查询工具如何重塑信息检索的未来?
镜舟科技
StarRocks QueryGPT 数据查询 数据分析 多模态交互
从客户行为数据到供应链信息,从市场趋势到内部运营指标,这些数据蕴含着巨大的商业价值。然而,数据量的激增也带来了前所未有的检索挑战:如何在海量信息中快速定位所需数据?如何确保查询结果的准确性和时效性?据统计,75%的企业正受困于低效的查询工具,这已成为阻碍企业数字化转型的关键痛点。传统的数据查询方式主要依赖SQL语句或特定的查询语言,这要求用户具备专业的编程知识和对数据结构的深入理解。即使对于数据分
installGo.sh
#!/bin/bash#检查是否以root用户运行if["$(id-u)"-ne0];thenecho"请使用root权限运行此脚本"exit1fi#检查是否安装了必要的工具forcmdincurlwgettar;doif!command-v$cmd&>/dev/null;thenecho"错误:需要安装$cmd"exit1fidone#获取最新版本号echo"正在获取最新Go版本..."LATE
Python训练营打卡——DAY16(2025.5.5)
cosine2025
Python训练营打卡 python 开发语言 机器学习
目录一、NumPy数组基础笔记1.理解数组的维度(Dimensions)2.NumPy数组与深度学习Tensor的关系3.一维数组(1DArray)4.二维数组(2DArray)5.数组的创建5.1数组的简单创建5.2数组的随机化创建5.3数组的遍历5.4数组的运算6.数组的索引6.1一维数组索引6.2二维数组索引6.3三维数组索引二、SHAP值的深入理解三、总结1.NumPy数组基础总结2.SH
Python的一点基础教程------文件读写
卡提西亚
python 开发语言
最近在看大佬写的Python教程自学,但是感觉有点头痛,因为大佬讲了一些底层的结构和原理,但是又没那么详细,然后作为一个初学者自学的情况下,看的很费劲.看完就有感而发,想写一篇更基础的教程,教会大家怎么去用它,尽量少的去讲原理.但是当然,你也需要有一定的编程语言基础,了解基本的语法和函数等功能.正所谓师傅领进门,修行在个人,有时候我们学了一个东西,如果觉得很有趣,自然就会去了解关于它的更多信息,但
AI写作实战:从零开始撰写项目提案
SuperMale-zxq
AI编程 写作 投资专栏 AI写作 java 人工智能 AI编程 python
AI写作实战:从零开始撰写项目提案为什么大多数项目提案一出生就已经死亡?还记得上周看到一封邮件吗?一位读者小李发了他精心准备的项目提案,希望有人给些建议。打开附件的那一刻,我叹了口气——这又是一份"自嗨式提案":密密麻麻的文字堆砌、技术术语泛滥、价值主张模糊不清。我发现数千份项目提案中,有超过80%在开头几分钟就失去了读者的注意力。更残酷的是,决策者通常只会花60秒浏览你的提案,如果没有在这短暂时
<script setup> 语法糖
前端岳大宝
前端框架Vue vue.js 前端 javascript
下面,我们来系统的梳理关于Vue3语法糖的基本知识点:一、核心概念1.1什么是?是Vue3中CompositionAPI的编译时语法糖,它通过简化组件声明方式,显著减少样板代码,提供更符合直觉的开发体验。1.2设计目标与优势目标实现方式优势减少样板代码自动暴露顶层绑定代码更简洁提升开发体验更自然的响应式写法开发更高效更好的类型支持原生TypeScript集成类型安全编译时优化编译阶段处理运行时更高
动手学Python:从零开始构建一个“文字冒险游戏”
network爬虫
python python 开发语言
动手学Python:从零开始构建一个“文字冒险游戏”大家好,我是你的技术向导。今天,我们不聊高深的框架,也不谈复杂的算法,我们来做一点“复古”又极具趣味性的事情——用Python亲手打造一个属于自己的文字冒险游戏(TextAdventureGame)。你是否还记得那些在早期计算机上,通过一行行文字描述和简单指令来探索未知世界的日子?这种游戏的魅力在于它能激发我们最原始的想象力。而对于我们程序员来说
2025.6.27总结
天真小巫
职场记录 职场和发展
最近工作又开始内耗了,一位同事的转岗直接让我破防了,明明他工作干得很不错,会得又多,性格又好,我还经常请教他业务上的问题。我和他的关系并不算太好,但他加入其他部门,竟然让我有些不舍,这种不舍,不清楚是怎么回事。再工作中,给予我帮助的同事有不少,但和他共事,我学会了很多业务上的东西,合作的也挺愉快的,工作上的协作也很顺利。年初时,主管还跟我说,我们整个团队,就是战友,工作中相处的时间比家人还长。我当
【C++】简单学——类和对象(下)
CtrlZ小牛码
C++简单学 c++ 开发语言
初始化列表前提:对象实例化,成员变量就整体定义了,那么成员变量是在哪里单体定义初始化的?构造函数处吗?概念概念:初始化列表是每个的成员定义初始化的位置位置:在构造函数底下结构::代表开始,代表分点classDate{public:////初始化列表Date(intyear,intmonth,intday):_year(year),_month(month),_day(day){}}语法一个成员变量
Java实现的基于模板的网页结构化信息精准抽取组件:HtmlExtractor
yangshangchuan
信息抽取 HtmlExtractor 精准抽取 信息采集
HtmlExtractor是一个Java实现的基于模板的网页结构化信息精准抽取组件,本身并不包含爬虫功能,但可被爬虫或其他程序调用以便更精准地对网页结构化信息进行抽取。
HtmlExtractor是为大规模分布式环境设计的,采用主从架构,主节点负责维护抽取规则,从节点向主节点请求抽取规则,当抽取规则发生变化,主节点主动通知从节点,从而能实现抽取规则变化之后的实时动态生效。
如
java编程思想 -- 多态
百合不是茶
java 多态详解
一: 向上转型和向下转型
面向对象中的转型只会发生在有继承关系的子类和父类中(接口的实现也包括在这里)。父类:人 子类:男人向上转型: Person p = new Man() ; //向上转型不需要强制类型转化向下转型: Man man =
[自动数据处理]稳扎稳打,逐步形成自有ADP系统体系
comsci
dp
对于国内的IT行业来讲,虽然我们已经有了"两弹一星",在局部领域形成了自己独有的技术特征,并初步摆脱了国外的控制...但是前面的路还很长....
首先是我们的自动数据处理系统还无法处理很多高级工程...中等规模的拓扑分析系统也没有完成,更加复杂的
storm 自定义 日志文件
商人shang
storm cluster logback
Storm中的日志级级别默认为INFO,并且,日志文件是根据worker号来进行区分的,这样,同一个log文件中的信息不一定是一个业务的,这样就会有以下两个需求出现:
1. 想要进行一些调试信息的输出
2. 调试信息或者业务日志信息想要输出到一些固定的文件中
不要怕,不要烦恼,其实Storm已经提供了这样的支持,可以通过自定义logback 下的 cluster.xml 来输
Extjs3 SpringMVC使用 @RequestBody 标签问题记录
21jhf
springMVC使用 @RequestBody(required = false) UserVO userInfo
传递json对象数据,往往会出现http 415,400,500等错误,总结一下需要使用ajax提交json数据才行,ajax提交使用proxy,参数为jsonData,不能为params;另外,需要设置Content-type属性为json,代码如下:
(由于使用了父类aaa
一些排错方法
文强chu
方法
1、java.lang.IllegalStateException: Class invariant violation
at org.apache.log4j.LogManager.getLoggerRepository(LogManager.java:199)at org.apache.log4j.LogManager.getLogger(LogManager.java:228)
at o
Swing中文件恢复我觉得很难
小桔子
swing
我那个草了!老大怎么回事,怎么做项目评估的?只会说相信你可以做的,试一下,有的是时间!
用java开发一个图文处理工具,类似word,任意位置插入、拖动、删除图片以及文本等。文本框、流程图等,数据保存数据库,其余可保存pdf格式。ok,姐姐千辛万苦,
php 文件操作
aichenglong
PHP 读取文件 写入文件
1 写入文件
@$fp=fopen("$DOCUMENT_ROOT/order.txt", "ab");
if(!$fp){
echo "open file error" ;
exit;
}
$outputstring="date:"." \t tire:".$tire."
MySQL的btree索引和hash索引的区别
AILIKES
数据结构 mysql 算法
Hash 索引结构的特殊性,其 检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引。
可能很多人又有疑问了,既然 Hash 索引的效率要比 B-Tree 高很多,为什么大家不都用 Hash 索引而还要使用 B-Tree 索引呢
JAVA的抽象--- 接口 --实现
百合不是茶
抽象 接口 实现接口
//抽象 类 ,方法
//定义一个公共抽象的类 ,并在类中定义一个抽象的方法体
抽象的定义使用abstract
abstract class A 定义一个抽象类 例如:
//定义一个基类
public abstract class A{
//抽象类不能用来实例化,只能用来继承
//
JS变量作用域实例
bijian1013
作用域
<script>
var scope='hello';
function a(){
console.log(scope); //undefined
var scope='world';
console.log(scope); //world
console.log(b);
TDD实践(二)
bijian1013
java TDD
实践题目:分解质因数
Step1:
单元测试:
package com.bijian.study.factor.test;
import java.util.Arrays;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import com.bijian.
[MongoDB学习笔记一]MongoDB主从复制
bit1129
mongodb
MongoDB称为分布式数据库,主要原因是1.基于副本集的数据备份, 2.基于切片的数据扩容。副本集解决数据的读写性能问题,切片解决了MongoDB的数据扩容问题。
事实上,MongoDB提供了主从复制和副本复制两种备份方式,在MongoDB的主从复制和副本复制集群环境中,只有一台作为主服务器,另外一台或者多台服务器作为从服务器。 本文介绍MongoDB的主从复制模式,需要指明
【HBase五】Java API操作HBase
bit1129
hbase
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.ha
python调用zabbix api接口实时展示数据
ronin47
zabbix api接口来进行展示。经过思考之后,计划获取如下内容: 1、 获得认证密钥 2、 获取zabbix所有的主机组 3、 获取单个组下的所有主机 4、 获取某个主机下的所有监控项  
jsp取得绝对路径
byalias
绝对路径
在JavaWeb开发中,常使用绝对路径的方式来引入JavaScript和CSS文件,这样可以避免因为目录变动导致引入文件找不到的情况,常用的做法如下:
一、使用${pageContext.request.contextPath}
代码” ${pageContext.request.contextPath}”的作用是取出部署的应用程序名,这样不管如何部署,所用路径都是正确的。
Java定时任务调度:用ExecutorService取代Timer
bylijinnan
java
《Java并发编程实战》一书提到的用ExecutorService取代Java Timer有几个理由,我认为其中最重要的理由是:
如果TimerTask抛出未检查的异常,Timer将会产生无法预料的行为。Timer线程并不捕获异常,所以 TimerTask抛出的未检查的异常会终止timer线程。这种情况下,Timer也不会再重新恢复线程的执行了;它错误的认为整个Timer都被取消了。此时,已经被
SQL 优化原则
chicony
sql
一、问题的提出
在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方面就是SQL语句的优化。对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统
java 线程弹球小游戏
CrazyMizzz
java 游戏
最近java学到线程,于是做了一个线程弹球的小游戏,不过还没完善
这里是提纲
1.线程弹球游戏实现
1.实现界面需要使用哪些API类
JFrame
JPanel
JButton
FlowLayout
Graphics2D
Thread
Color
ActionListener
ActionEvent
MouseListener
Mouse
hadoop jps出现process information unavailable提示解决办法
daizj
hadoop jps
hadoop jps出现process information unavailable提示解决办法
jps时出现如下信息:
3019 -- process information unavailable3053 -- process information unavailable2985 -- process information unavailable2917 --
PHP图片水印缩放类实现
dcj3sjt126com
PHP
<?php
class Image{
private $path;
function __construct($path='./'){
$this->path=rtrim($path,'/').'/';
}
//水印函数,参数:背景图,水印图,位置,前缀,TMD透明度
public function water($b,$l,$pos
IOS控件学习:UILabel常用属性与用法
dcj3sjt126com
ios UILabel
参考网站:
http://shijue.me/show_text/521c396a8ddf876566000007
http://www.tuicool.com/articles/zquENb
http://blog.csdn.net/a451493485/article/details/9454695
http://wiki.eoe.cn/page/iOS_pptl_artile_281
完全手动建立maven骨架
eksliang
java eclipse Web
建一个 JAVA 项目 :
mvn archetype:create
-DgroupId=com.demo
-DartifactId=App
[-Dversion=0.0.1-SNAPSHOT]
[-Dpackaging=jar]
建一个 web 项目 :
mvn archetype:create
-DgroupId=com.demo
-DartifactId=web-a
配置清单
gengzg
配置
1、修改grub启动的内核版本
vi /boot/grub/grub.conf
将default 0改为1
拷贝mt7601Usta.ko到/lib文件夹
拷贝RT2870STA.dat到 /etc/Wireless/RT2870STA/文件夹
拷贝wifiscan到bin文件夹,chmod 775 /bin/wifiscan
拷贝wifiget.sh到bin文件夹,chm
Windows端口被占用处理方法
huqiji
windows
以下文章主要以80端口号为例,如果想知道其他的端口号也可以使用该方法..........................1、在windows下如何查看80端口占用情况?是被哪个进程占用?如何终止等. 这里主要是用到windows下的DOS工具,点击"开始"--"运行",输入&
开源ckplayer 网页播放器, 跨平台(html5, mobile),flv, f4v, mp4, rtmp协议. webm, ogg, m3u8 !
天梯梦
mobile
CKplayer,其全称为超酷flv播放器,它是一款用于网页上播放视频的软件,支持的格式有:http协议上的flv,f4v,mp4格式,同时支持rtmp视频流格 式播放,此播放器的特点在于用户可以自己定义播放器的风格,诸如播放/暂停按钮,静音按钮,全屏按钮都是以外部图片接口形式调用,用户根据自己的需要制作 出播放器风格所需要使用的各个按钮图片然后替换掉原始风格里相应的图片就可以制作出自己的风格了,
简单工厂设计模式
hm4123660
java 工厂设计模式 简单工厂模式
简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式。是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
maven笔记
zhb8015
maven
跳过测试阶段:
mvn package -DskipTests
临时性跳过测试代码的编译:
mvn package -Dmaven.test.skip=true
maven.test.skip同时控制maven-compiler-plugin和maven-surefire-plugin两个插件的行为,即跳过编译,又跳过测试。
指定测试类
mvn test
非mapreduce生成Hfile,然后导入hbase当中
Stark_Summer
map hbase reduce Hfile path实例
最近一个群友的boss让研究hbase,让hbase的入库速度达到5w+/s,这可愁死了,4台个人电脑组成的集群,多线程入库调了好久,速度也才1w左右,都没有达到理想的那种速度,然后就想到了这种方式,但是网上多是用mapreduce来实现入库,而现在的需求是实时入库,不生成文件了,所以就只能自己用代码实现了,但是网上查了很多资料都没有查到,最后在一个网友的指引下,看了源码,最后找到了生成Hfile
jsp web tomcat 编码问题
王新春
tomcat jsp pageEncode
今天配置jsp项目在tomcat上,windows上正常,而linux上显示乱码,最后定位原因为tomcat 的server.xml 文件的配置,添加 URIEncoding 属性:
<Connector port="8080" protocol="HTTP/1.1"
connectionTi