FAQ Collection-性能调整

Milvus 2.6 + RAG 实战:从零搭建企业知识库 在人工智能与大模型快速落地的今天,如何让 AI 准确回答私有领域问题,成为企业数字化转型的核心痛点。向量数据库作为语义检索的基础设施,负责将文本、图片等非结构化数据转换为高维向量,并支持高效的相似度搜索。检索增强生成(RAG)则进一步利用向量检索结果,为大模型提供可靠的外部上下文,从而缓解知识更新慢、幻觉频发等问题。理解向量数据库的索引原理、距离度量与部署方式,是构建高质量 RAG 系统的前提。企业知识库问答、智能客服、语义搜索与推荐召回等场景,都依赖这一技术栈实现精准、可溯源的回答。本文基于 Milvus 阅读详情

[Q]如何设置自动跟踪
[A]
用syst登录
    执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建计划表
    执行$ORACLE_HOME/sqlplus/admin/plustrce.sql创建plustrace角色
    如果想计划表让每个用户都能使用,则
   SQL>create public synonym plan_table for plan_table;
    SQL> grant all on plan_table to public;
    如果想让自动跟踪的角色让每个用户都能使用,则
   SQL> grant plustrace to public;
    通过如下语句开启/停止跟踪
    SET AUTOTRACE ON |OFF
    | ON EXPLAIN | ON STATISTICS | TRACEONLY | TRACEONLY EXPLAIN

关于Autotrace几个常用选项的说明:

SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式
SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告
SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息
SET AUTOTRACE ON ----------------- 包含执行计划和统计信息
SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询输出

SQL> set autotrace traceonly
SQL> select table_name from user_tables;

已选择98行。

已用时间: 00: 00: 00.04

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 NESTED LOOPS
2 1 NESTED LOOPS (OUTER)
3 2 NESTED LOOPS (OUTER)
4 3 NESTED LOOPS (OUTER)
5 4 NESTED LOOPS (OUTER)
6 5 NESTED LOOPS
7 6 TABLE ACCESS (BY INDEX ROWID) OF 'OBJ$'
8 7 INDEX (RANGE SCAN) OF 'I_OBJ2' (UNIQUE)
9 6 TABLE ACCESS (CLUSTER) OF 'TAB$'
10 9 INDEX (UNIQUE SCAN) OF 'I_OBJ#' (NON-UNIQUE)
11 5 TABLE ACCESS (BY INDEX ROWID) OF 'OBJ$'
12 11 INDEX (UNIQUE SCAN) OF 'I_OBJ1' (UNIQUE)
13 4 INDEX (UNIQUE SCAN) OF 'I_OBJ1' (UNIQUE)
14 3 TABLE ACCESS (CLUSTER) OF 'USER$'
15 14 INDEX (UNIQUE SCAN) OF 'I_USER#' (NON-UNIQUE)
16 2 TABLE ACCESS (CLUSTER) OF 'SEG$'
17 16 INDEX (UNIQUE SCAN) OF 'I_FILE#_BLOCK#' (NON-UNIQUE)
18 1 TABLE ACCESS (CLUSTER) OF 'TS$'
19 18 INDEX (UNIQUE SCAN) OF 'I_TS#' (NON-UNIQUE)

Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1389 consistent gets
0 physical reads
0 redo size
2528 bytes sent via SQL*Net to client
569 bytes received via SQL*Net from client
8 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
98 rows processed

SQL>

[Q]如果跟踪自己的会话或者是别人的会话
[A]
跟踪自己的会话很简单
    Alter session set sql_trace true|false
    Or
    Exec dbms_session.set_sql_trace(TRUE);
    如果跟踪别人的会话,需要调用一个包
    exec dbms_system.set_sql_trace_in_session(sid,serial#,true|false)
    跟踪的信息在user_dump_dest 目录下可以找到或通过如下脚本获得文件名称(适用于Win环境,如果是unix需要做一定修改)
    SELECT p1.value||'\'||p2.value||'_ora_'||p.spid||'.ora' filename
    FROM
    v$process p,
    v$session s,
    v$parameter p1,
    v$parameter p2
    WHERE p1.name = 'user_dump_dest'
    AND p2.name = 'db_name'
    AND p.addr = s.paddr
    AND s.audsid = USERENV ('SESSIONID')

    最后,可以通过Tkprof来解析跟踪文件,如
    Tkprof 原文件 目标文件 sys=n

[Q]怎么设置整个数据库系统跟踪
[A]
其实文档上的alter system set sql_trace=true是不成功的
    但是可以通过设置事件来完成这个工作,作用相等
    alter system set events '10046 trace name context forever,level 1';
    如果关闭跟踪,可以用如下语句
    alter system set events '10046 trace name context off';

    其中的level 1与上面的8都是跟踪级别
    level 1:跟踪SQL语句,等于sql_trace=true
    level 4:包括变量的详细信息
    level 8:包括等待事件
    level 12:包括绑定变量与等待事件

[Q]怎么样根据OS进程快速获得DB进程信息与正在执行的语句
[A]
有些时候,我们在OS上操作,象TOP之后我们得到的OS进程,怎么快速根据OS信息获得DB信息呢?
    我们可以编写如下脚本:
    $more whoit.sh
    #!/bin/sh
    sqlplus /nolog < connect / as sysdba
    col machine format a30
    col program format a40
    set line 200
    select sid,serial# ,username,osuser,machine,program,process,to_char(logon_time,'yyyy/mm/dd hh24:mi:ss')
    from v\$session where paddr in
    ( select addr from v\$process where spid in($1));

    select sql_text from v\$sqltext_with_newlines
    where hash_value in
    (select SQL_HASH_value from v\$session where
    paddr in (select addr from v\$process where spid=$1)
    )
    order by piece;

    exit;
    EOF

    然后,我们只要在OS环境下如下执行即可
    $./whoit.sh Spid

[Q]怎么样分析表或索引
[A]
命令行方式可以采用analyze命令
    如:Analyze table tablename compute statistics;
    Analyze index|cluster indexname estimate statistics;
     Analyze table tablename estimate statistics sample 20 percent;
    ANALYZE TABLE tablename COMPUTE STATISTICS
    FOR TABLE
    FOR ALL [LOCAL] INDEXES
    FOR ALL [INDEXED] COLUMNS;
    ANALYZE TABLE tablename DELETE STATISTICS
    ANALYZE TABLE tablename VALIDATE REF UPDATE
    ANALYZE TABLE tablename VALIDATE STRUCTURE
    [CASCADE]|[INTO TableName]
    ANALYZE TABLE tablename LIST CHAINED ROWS [INTO TableName]
    等等。

Oracle的online document这样描述analyze的作用:
Use the ANALYZE statement to collect non-optimizer statistics, for example, to:

1、Collect or delete statistics about an index or index partition, table or table partition, index-organized table, cluster, or scalar object attribute.
2、Validate the structure of an index or index partition, table or table partition, index-organized table, cluster, or object reference (REF).
3、Identify migrated and chained rows of a table or cluster.
--收集统计信息的作用使CBO方式的优化选择执行计划更准确。在10g会自动analyze,之前的版本需要手动定期。

    如果想分析整个用户或数据库,还可以采用工具包,可以并行分析
    Dbms_utility(8i以前的工具包)
    Dbms_stats(8i以后提供的工具包)
    如
    dbms_stats.gather_schema_stats(User,estimate_percent=>100,cascade=> TRUE);
    dbms_stats.gather_table_stats(User,TableName,degree => 4,cascade => true);

    这是对命令与工具包的一些总结

    1、对于分区表,建议使用DBMS_STATS,而不是使用Analyze语句。

    a) 可以并行进行,对多个用户,多个Table

    b) 可以得到整个分区表的数据和单个分区的数据。

    c) 可以在不同级别上Compute Statistics:单个分区,子分区,全表,所有分区

    d) 可以倒出统计信息

    e) 可以用户自动收集统计信息

    2、DBMS_STATS的缺点

    a) 不能Validate Structure

    b) 不能收集CHAINED ROWS, 不能收集CLUSTER TABLE的信息,这两个仍旧需要使用Analyze语句。

    c) DBMS_STATS 默认不对索引进行Analyze,因为默认Cascade是False,需要手工指定为True

    3、对于oracle 9里面的External Table,Analyze不能使用,只能使用DBMS_STATS来收集信息。

一个论坛上的帖子:

Analyze table对Oracle性能的提升的讨论:
url:http://www.itpub.net/thread-295293-1-1.html

关于dbms_stats和Analyze的比较分析:
http://blog.chinaunix.net/u2/64949/showart_524376.html

[Q]怎么样快速重整索引
[A]
通过rebuild语句,可以快速重整或移动索引到别的表空间
    rebuild有重建整个索引数的功能,可以在不删除原始索引的情况下改变索引的存储参数
    语法为
    alter index index_name rebuild tablespace ts_name
    storage(……);
    如果要快速重建整个用户下的索引,可以用如下脚本,当然,需要根据你自己的情况做相应修改
    SQL> set heading off
    SQL> set feedback off
    SQL> spool d:\index.sql
    SQL> SELECT 'alter index ' || index_name || ' rebuild '
    ||'tablespace INDEXES storage(initial 256K next 256K pctincrease 0);'
    FROM all_indexes
    WHERE ( tablespace_name != 'INDEXES'
    OR next_extent != ( 256 * 1024 )
    )
    AND owner = USER
    SQL>spool off
    另外一个合并索引的语句是
    alter index index_name coalesce,这个语句仅仅是合并索引中同一级的leaf block
    消耗不大,对于有些索引中存在大量空间浪费的情况下,有一些作用。

[Q]如何使用Hint提示
[A]
在select/delete/update后写/*+ hint */
    如 select /*+ index(TABLE_NAME INDEX_NAME) */ col1...
    注意/*和+之间不能有空格
    如用hint指定使用某个索引

    select /*+ index(cbotab) */ col1 from cbotab;
    select /*+ index(cbotab cbotab1) */ col1 from cbotab;
    select /*+ index(a cbotab1) */ col1 from cbotab a;
    其中
    TABLE_NAME是必须要写的,且如果在查询中使用了表的别名,在hint也要用表的别名来代替表名;
    INDEX_NAME可以不必写,Oracle会根据统计值选一个索引;
    如果索引名或表名写错了,那这个hint就会被忽略;

[Q]怎么样快速复制表或者是插入数据
[A]
快速复制表可以指定Nologging选项
    如:Create table t1 nologging
    as select * from t2;
    快速插入数据可以指定append提示,但是需要注意
    noarchivelog模式下,默认用了append就是nologging模式的。
    如:insert /*+ append */ into t1
    select * from t2
    在archivelog下,需要把表设置程Nologging模式。
‍   如:alter table t1 nologging;

           ‍insert /*+ append */ into t1

‍          select * from t2
    
    注意:如果在9i环境中并设置了FORCE LOGGING,则以上操作是无效的,并不会加快,当然,可以通过如下语句设置为NO FORCE LOGGING。
    Alter database no force logging;
    是否开启了FORCE LOGGING,可以用如下语句查看
    SQL> select force_logging from v$database;

[Q]怎么避免使用特定索引
[A]
在很多时候,Oracle会错误的使用索引而导致效率的明显下降,我们可以使用一点点技巧而避免使用不该使用的索引,如:
    表test,有字段a,b,c,d,在a,b,c上建立联合索引inx_a(a,b,c),在b上单独建立了一个索引Inx_b(b)。
    在正常情况下,where a=? and b=? and c=?会用到索引inx_a,
    where b=?会用到索引inx_b
    但是,where a=? and b=? and c=? group by b会用到哪个索引呢?在分析数据不正确(很长时间没有分析)或根本没有分析数据的情况下,oracle往往会使用索引inx_b。通过执行计划的分析,这个索引的使用,将大大耗费查询时间。
    当然,我们可以通过如下的技巧避免使用inx_b,而使用inx_a。
    where a=? and b=? and c=? group by b||'' --如果b是字符
    where a=? and b=? and c=? group by b+0 --如果b是数字
    通过这样简单的改变,往往可以是查询时间提交很多倍
    当然,我们也可以使用no_index提示,相信很多人没有用过,也是一个不错的方法:
    select /*+ no_index(t,inx_b) */ * from test t
            where a=? and b=? and c=? group by b

[Q]Oracle什么时候会使用跳跃式索引扫描
[A]
这是9i的一个新特性跳跃式索引扫描(Index Skip Scan).
    例如表有索引index(a,b,c),当查询条件为
    where b=?的时候,可能会使用到索引index(a,b,c)
    如,执行计划中出现如下计划:
    INDEX (SKIP SCAN) OF 'TEST_IDX' (NON-UNIQUE)
    Oracle的优化器(这里指的是CBO)能对查询应用Index Skip Scans至少要有几个条件:
    1 优化器认为是合适的。
    2 索引中的前导列的唯一值的数量能满足一定的条件(如重复值很多)。
    3 优化器要知道前导列的值分布(通过分析/统计表得到)。
    4 合适的SQL语句
    等。

[Q]怎么样创建使用虚拟索引
[A]
可以使用nosegment选项,如
    create index virtual_index_name on table_name(col_name) nosegment;
    如果在哪个session需要测试虚拟索引,可以利用隐含参数来处理
    alter session set "_use_nosegment_indexes" = true;
    就可以利用explain plan for select ……来看虚拟索引的效果
    利用@$ORACLE_HOME/rdbms/admin/utlxpls查看执行计划
    最后,根据需要,我们可以删除虚拟索引,如普通索引一样
    drop index virtual_index_name;
    注意:虚拟索引并不是物理存在的,所以虚拟索引并不等同于物理索引,不要用自动跟踪去测试虚拟索引,因为那是实际执行的效果,是用不到虚拟索引的。

[Q]怎样监控无用的索引
[A]
Oracle 9i以上,可以监控索引的使用情况,如果一段时间内没有使用的索引,一般就是无用的索引
    语法为:
    开始监控:alter index index_name monitoring usage;
    检查使用状态:select * from v$object_usage;
    停止监控:alter index index_name nomonitoring usage;
    当然,如果想监控整个用户下的索引,可以采用如下的脚本:
    set heading off
    set echo off
    set feedback off
    set pages 10000
    spool start_index_monitor.sql
    SELECT 'alter index '||owner||'.'||index_name||' monitoring usage;'
    FROM dba_indexes
    WHERE owner = USER;
    spool off
    set heading on
    set echo on
    set feedback on
    ------------------------------------------------
    set heading off
    set echo off
    set feedback off
    set pages 10000
    spool stop_index_monitor.sql
    SELECT 'alter index '||owner||'.'||index_name||' nomonitoring usage;'
    FROM dba_indexes
    WHERE owner = USER;
    spool off
    set heading on
    set echo on
    set feedback on

[Q]怎么样能固定我的执行计划
[A]
可以使用OUTLINE来固定SQL语句的执行计划
    用如下语句可以创建一个OUTLINE
    Create or replace outline OutLn_Name on
    Select Col1,Col2 from Table
    where ……
    如果要删除Outline,可以采用
    Drop Outline OutLn_Name;
    对于已经创建了的OutLine,存放在OUTLN用户的OL$HINTS表下面
    对于有些语句,你可以使用update outln.ol$hints来更新outline
    如:update outln.ol$hints(ol_name,'TEST1','TEST2','TEST2','TEST1)
           where ol_name in ('TEST1','TEST2');
    这样,你就把Test1 OUTLINE与Test2 OUTLINE互换了
    如果想利用已经存在的OUTLINE,需要设置以下参数
    Alter system/session set Query_rewrite_enabled = true
    Alter system/session set use_stored_outlines = true

[Q]v$sysstat中的class分别代表什么
[A]
统计类别
    1 代表事例活动
    2 代表Redo buffer活动
    4 代表锁
    8 代表数据缓冲活动
    16 代表OS活动
    32 代表并行活动
    64 代表表访问
    128 代表调试信息

[Q]怎么杀掉特定的数据库会话
[A]
Alter system kill session 'sid,serial#';
    或者
    alter system disconnect session 'sid,serial#' immediate;
    在win上,还可以采用oracle提供的orakill杀掉一个线程(其实就是一个Oracle进程)
    在Linux/Unix上,可以直接利用kill杀掉数据库进程对应的OS进程

[Q]怎么快速查找锁与锁等待
[A]
数据库的锁是比较耗费资源的,特别是发生锁等待的时候,我们必须找到发生等待的锁,有可能的话,杀掉该进程。
    这个语句将查找到数据库中所有的DML语句产生的锁,还可以发现,任何DML语句其实产生了两个锁,一个是表锁,一个是行锁。
    可以通过alter system kill session 'sid,serial#' 来杀掉会话
  Select /*+ rule */
   s.Username,
   Decode(l.Type, 'TM', 'TABLE LOCK', 'TX', 'ROW LOCK', Null) Lock_Level,
   o.Owner,
   o.Object_Name,
   o.Object_Type,
   s.Sid,
   s.Serial#,
   s.Terminal,
   s.Machine,
   s.Program,
   s.Osuser
    From V$session s, V$lock l, Dba_Objects o
   Where l.Sid = s.Sid
     And l.Id1 = o.Object_Id(+)
     And s.Username Is Not Null
    如果发生了锁等待,我们可能更想知道是谁锁了表而引起谁的等待
    以下的语句可以查询到谁锁了表,而谁在等待。
    SELECT /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username User_name,
    o.owner,o.object_name,o.object_type,s.sid,s.serial#
    FROM v$locked_object l,dba_objects o,v$session s
    WHERE l.object_id=o.object_id
    AND l.session_id=s.sid
    ORDER BY o.object_id,xidusn DESC
    以上查询结果是一个树状结构,如果有子节点,则表示有等待发生。如果想知道锁用了哪个回滚段,还可以关联到V$rollname,其中xidusn就是回滚段的USN

[Q] 如何有效的删除一个大表(extent数很多的表)
[A]
一个有很多(100k)extent的表,如果只是简单地用drop table的话,会很大量消耗CPU(Oracle要对fet$、uet$数据字典进行操作),可能会用上几天的时间,较好的方法是分多次删除extent,以减轻这种消耗:
    1. truncate table big-table reuse storage;
    2. alter table big-table deallocate unused keep 2000m ( 原来大小的n-1/n);
    3. alter table big-table deallocate unused keep 1500m ;
    ....
    4. drop table big-table;

[Q]如何收缩临时数据文件的大小
[A]
9i以下版本采用:
    ALTER DATABASE DATAFILE 'file name' RESIZE 100M类似的语句
    9i以上版本采用:
    ALTER DATABASE TEMPFILE 'file name' RESIZE 100M
    注意,临时数据文件在使用时,一般不能收缩,除非关闭数据库或断开所有会话,停止对临时数据文件的使用。

[Q]怎么清理临时段
[A]
可以使用如下办法
    1、 使用如下语句查看一下认谁在用临时段
    SELECT username,sid,serial#,sql_address,machine,program,
    tablespace,segtype, contents
    FROM v$session se,v$sort_usage su
    WHERE se.saddr=su.session_addr

    2、 那些正在使用临时段的进程
    SQL>Alter system kill session 'sid,serial#';
    3、把TEMP表空间回缩一下
    SQL>Alter tablespace TEMP coalesce;
    还可以使用诊断事件

    1、 确定TEMP表空间的ts#
    SQL> select ts#, name FROM v$tablespace;
    TS# NAME
    -----------------------
    0 SYSYEM
    1 RBS
    2 USERS
    3* TEMP
    ……

    2、 执行清理操作
    alter session set events 'immediate trace name DROP_SEGMENTS level TS#+1'
    说明:
    temp表空间的TS# 为 3*, So TS#+ 1= 4
    如果想清除所有表空间的临时段,则
    TS# = 2147483647

[Q]怎么样dump数据库内部结构,如上面显示的控制文件的结构
[A]
常见的有
    1、分析数据文件块,转储数据文件n的块m
    alter system dump datafile n block m

    2、分析日志文件
    alter system dump logfile logfilename;

    3、分析控制文件的内容
    alter session set events 'immediate trace name CONTROLF level 10'

    4、分析所有数据文件头
    alter session set events 'immediate trace name FILE_HDRS level 10'

    5、分析日志文件头
    alter session set events 'immediate trace name REDOHDR level 10'

    6、分析系统状态,最好每10分钟一次,做三次对比
    alter session set events 'immediate trace name SYSTEMSTATE level 10'

    7、分析进程状态
    alter session set events 'immediate trace name PROCESSSTATE level 10'

    8、分析Library Cache的详细情况
    alter session set events 'immediate trace name library_cache level 10'

[Q]如何获得所有的事件代码
[A]
事件代码范围一般从10000 to 10999,以下列出了这个范围的事件代码与信息
    SET SERVEROUTPUT ON
    DECLARE
    err_msg VARCHAR2(120);
    BEGIN
    dbms_output.enable (1000000);
    FOR err_num IN 10000..10999
    LOOP
    err_msg := SQLERRM (-err_num);
    IF err_msg NOT LIKE '%Message '||err_num||' not found%' THEN
    dbms_output.put_line (err_msg);
    END IF;
    END LOOP;
    END;
    /
    在Unix系统上,事件信息放在一个文本文件里
    $ORACLE_HOME/rdbms/mesg/oraus.msg
    可以用如下脚本查看事件信息
    event=10000
    while [ $event -ne 10999 ]
    do
    event=`expr $event + 1`
    oerr ora $event
    done
    对于已经确保的/正在跟踪的事件,可以用如下脚本获得
    SET SERVEROUTPUT ON
    DECLARE
    l_level NUMBER;
    BEGIN
    FOR l_event IN 10000..10999
    LOOP
    dbms_system.read_ev (l_event,l_level);
    IF l_level > 0 THEN
    dbms_output.put_line ('Event '||TO_CHAR (l_event)||
    ' is set at level '||TO_CHAR (l_level));
    END IF;
    END LOOP;
    END;
    /

[Q]什么是STATSPACK,我怎么使用它?
[A]
Statspack是Oracle 8i以上提供的一个非常好的性能监控与诊断工具,基本上全部包含了BSTAT/ESTAT的功能,更多的信息
    可以参考附带文档$ORACLE_HOME/rdbms/admin/spdoc.txt。

    安装Statspack:
    cd $ORACLE_HOME/rdbms/admin
    sqlplus "/ as sysdba" @spdrop.sql -- 卸载,第一次可以不需要
    sqlplus "/ as sysdba" @spcreate.sql -- 需要根据提示输入表空间名

    使用Statspack:
    sqlplus perfstat/perfstat
    exec statspack.snap; -- 进行信息收集统计,每次运行都将产生一个快照号
    -- 获得快照号,必须要有两个以上的快照,才能生成报表
    select SNAP_ID, SNAP_TIME from STATS$SNAPSHOT;
    @spreport.sql -- 输入需要查看的开始快照号与结束快照号

    其他相关脚本s:
    spauto.sql - 利用dbms_job提交一个作业,自动的进行STATPACK的信息收集统计
    sppurge.sql - 清除一段范围内的统计信息,需要提供开始快照与结束快照号
    sptrunc.sql - 清除(truncate)所有统计信息

GCC编译器 GCC编译器 GCC(GNU Compiler Collection,GNU编译器套装),一套由GNU开发的编程语言编译器。一套GNU编译器套装以GPL及LGPL许可证所发行的自由软件,也是GNU计划的关键部分,亦是自由的类Unix及苹果电脑Mac OS X操作系统的标准编译器。GCC原名为GNU C语言编译器,原本只能处理C语言。GCC很快地扩展,变得可处理C++。之后也变得可处理Fortran、Pascal、Objective-C、Java以及Ada与其它语言。GCC4.4开始默认支持2F架构,GCC4 阅读详情

相关推荐

ChromaDB 5分钟极速入门:零配置向量数据库实践指南

向量数据库是支撑语义搜索、RAG和AI记忆系统的核心基础设施,其本质是将文本等非结构化数据映射为高维向量,并通过近似最近邻(ANN)算法实现语义相似度检索。技术原理依赖嵌入模型生成向量、HNSW等索引结构加速搜索、以及L2或余弦距离衡量相似性。其核心价值在于突破关键词匹配局限,让‘苹果’能关联‘水果’‘红色’‘脆甜’等隐含语义。典型应用场景包括个人知识库构建、智能客服问答、博客内容推荐与读书笔记检索。本文聚焦ChromaDB这一专为开发者设计的轻量级向量数据库,以纯Python环境、内存模式、自动嵌入和直观

weixin_34117211的博客 1010

Java各个集合(Collection)的特性和用途

这篇文章总结了所有的Java集合(Collection)。主要介绍各个集合的特性和用途,以及在不同的集合类型之间转换的方式。 Arrays Array是Java特有的数组。在你知道所要处理数据元素个数的情况下非常好用。java.util.Arrays 包含了许多处理数据的实用方法: Arrays.asList:可以从 Array 转换成 List。可以作为其他集合类型构造器的参数

程柯梦想 2207

第37章:多租户与大规模知识库治理

本文摘要:文章探讨了企业级知识库平台的多租户治理方案设计。针对共享向量库导致的三大事故(全公司中断、数据泄漏、性能拖垮),提出混合隔离策略:敏感数据采用独立collection物理隔离,通用数据通过metadata逻辑隔离。设计了五层领域模型(Tenant→Space→KnowledgeBase→Document→Node)实现组织架构映射,并制定按租户和知识库分级的分片策略。最后介绍了灰度索引的餐厅换菜谱式流量切换方案,以及热/温/冷三温层数据生命周期管理机制。

davidwang456的专栏 55

Java Collection 集合类大小调整带来的性能消耗

Java Collection类的某些具体实现由于底层数据存储基于数组,随着元素数量的增加,调整大小的代价很大。随着Collection元素增长到某个上限,调整其大小可能出现性能问题。

fangchao2061的专栏 1684

从零开始搭建企业级安全扫描平台:基于Docker的Greenbone和ClamAV部署指南

本文提供了一份基于Docker容器技术,从零开始搭建企业级安全扫描平台的实战指南。详细介绍了如何部署和集成漏洞扫描工具Greenbone与病毒扫描工具ClamAV,涵盖架构设计、Docker环境优化、容器化部署步骤以及平台集成与监控方案,帮助企业构建自动化、可扩展的安全防御核心组件。

delta的博客 757

MMSegmentation 安装教程,避免mmcv不合适版本,及相关问题解决

都行,不做要求。

qq_43683133的博客 1220

MyBatis中 collection 的两种使用方法,及效率比较

方案一 &lt;resultMap type="Student" id="StudentMap"&gt; &lt;id column="id" property="id" /&gt; &lt;result column="name" property="name" /&gt;

hlz5857475的博客 2万+

DFT设计绪论

DFT设计的主要目的是为了将defect-free的芯片交给客户。 产品质量,通常使用Parts Per million(PPM)来衡量。 但是随着IC从SSI到VLSI的发展,在test上花销的时间越来越多,test的quality却很难提高,这使得DFT的engineer不断的发展着DFT的技术。 DFT engineer面对的第一个问题是设计内部的状态的可测试性问题。在...

ahr7882的博客 1195

5分钟上手vue-virtual-collection:从零构建你的第一个Vue虚拟滚动列表快速指南

还在为渲染上万条数据的列表卡顿而烦恼吗?今天带你 **5 分钟** 快速上手 **vue-virtual-collection** —— 一个专为 **Vue 2** 打造的 **虚拟滚动** 组件。它采用 **虚拟渲染(Virtualized Rendering)** 技术,只渲染可视区域内的列表项,让 **万级数据的大列表** 也能保持丝滑滚动的性能,是构建 **无限滚动、瀑布流、大表格**

gitblog_00824的博客 1060

人机协作新纪元:AI会抢走IT人的饭碗吗?

产品经理用自然语言描述需求,AI将其转化为技术规格书(准确率已达89%)

819

Ubuntu配置Qt Creator树莓派交叉编译环境一步到位

本文详细指导在Ubuntu系统上配置Qt Creator树莓派交叉编译环境。从工具链安装、sysroot创建到Qt库编译,逐步讲解如何搭建完整的ARMv7交叉编译工具链,实现高效开发树莓派应用。

1277

【限时免费】 有手就会!flux-lora-collection模型本地部署与首次推理全流程实战

在开始之前,请确保你的设备满足以下最低硬件要求: - **推理(Inference)**:至少需要一块支持CUDA的NVIDIA显卡(如RTX 2060及以上),显存建议8GB以上。 - **微调(Fine-tuning)**:显存需求更高,建议16GB及以上显存的显卡(如RTX 3090或A100)。 - 操作系统:推荐使用Linux(如Ubuntu 20.04)或Windows 10/11。 ...

gitblog_02600的博客 685

lammps蒙特卡洛MC模拟案例

在lammps中,和MC相关的模拟命令有三个:fix gcmc、fix atom/swap、fix sgcmc。在一个lammps模拟中,mc和md可同时存在,间隔运行,所以设置fix sgcmc命令的同时,可以同时设置系综(nve、nvt或者npt)。lammps官网自带案例中也有一个fix sgcmc的案例,主要模拟FeCu合金的MC建模。sgcmc命令可应用到合金的模拟中,如短程有序模拟。MC运行间隔为100步,最终的浓度比例为0.02,也就是2%的Fe原子交换为Cu原子。大家好,我是小马老师。

lammps_jiayou的博客 1825

性能优化困局:3个技术突破点助你提升50%开发效率

你是否曾经面对这样的困境:精心设计的算法在真实数据面前突然性能暴跌?明明代码逻辑清晰,但系统响应时间就是无法满足需求?当你的应用从测试环境走向生产环境,性能瓶颈就像幽灵一样无处不在。今天,我们将深入探讨如何利用开源技术突破这些瓶颈,实现开发效率的实质性飞跃。 ## 场景一:数据结构选择的迷茫与突破 在开发高性能应用时,数据结构的选择往往决定了系统的生死。传统的"试错法"不仅耗时耗力,还可能导致

gitblog_01090的博客 705

YOLOv11与CLIP融合的零样本目标检测技术:原理、实现与创新实践

YOLO(You Only Look Once)系列作为单阶段检测器的代表,以其实时高效的特性在工业界获得广泛应用。YOLOv11作为该系列的最新演进,引入了多项架构创新: C3K2模块:采用双小卷积核替代传统大卷积核,在保持感受野的同时减少计算量。当参数c3k=False时退化为YOLOv8的C2F模块,提供灵活的精度-效率权衡。 C2PSA(Convolutional block with Parallel Spatial Attention):通过并行空间注意力机制增强对微小目标的特征提取能力,这对

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1068

第11节:GPU 线程层级:线程、线程块、网格

层级标识变量功能线程threadIdx执行单元,处理数据线程块blockIdx管理多个线程,提供共享内存网格管理多个 blockGPU 编程中,合理安排线程层级,是提升性能的关键。

yumeiguo的博客 211

扣子的知识库智能客服:从架构设计到生产环境部署的实战指南

扣子的知识库智能客服:从架构设计到生产环境部署的实战指南。

2600_94959894的博客 336

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

MongoDB数据库健康检查:复制、性能与备份三大体征监护指南

数据库健康检查是保障高可用与数据一致性的基础能力,其核心在于对复制状态、性能表现和备份可靠性这三大技术体征的持续监测。复制健康决定主从同步时效与故障切换能力,性能健康反映查询效率与资源利用率,备份健康则直接关联RPO/RTO等灾备指标。MongoDB中replication lag、oplog窗口、慢查询执行计划、索引使用率及连续备份状态等关键指标,共同构成可量化的健康评估体系。本文聚焦真实运维场景,结合rs.status()诊断逻辑、explain执行分析、Atlas监控联动与restore验证实践,提供

coolmsn8786的博客 319

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Milvus 2.6 + RAG 企业落地:从架构设计到性能调优全解析

向量数据库作为大模型应用的关键基础设施,承载着文本向量化后的存储与相似度检索任务。RAG(检索增强生成)架构通过召回相关文档片段来提升大模型回答的准确性,其核心链路涉及文档切块、Embedding模型、向量检索等环节。在企业级场景中,数据量从万级增长到千万级,检索延迟、写入吞吐和并发稳定性成为必须解决的问题。Milvus 2.6凭借高性能索引、分区分片和灵活的标量过滤机制,成为搭建RAG系统的热门选择。本文从向量数据库原理出发,结合真实工程实践,梳理了从环境搭建、集合设计、索引调优到生产部署的完整路径,并针

weixin_33794672的博客 295

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

深入理解 ChromaDB

ChromaDB是一个专为AI应用设计的开源向量数据库,其核心功能是通过语义而非关键词进行信息检索。与传统数据库和搜索引擎不同,ChromaDB利用向量嵌入技术将文本转换为高维向量,通过计算向量间的相似度实现语义搜索。它在LLM应用栈中扮演"外部语义记忆"的角色,是RAG架构的关键基础设施。ChromaDB采用四层数据模型(Client-Collection-Document-Embedding),支持多种相似度度量方式,能够高效处理非结构化数据的语义检索需求,弥合了人类语义表达与计算机

小飞的博客 904

JDK5.0垃圾收集优化之--Don't Pause

     Java开发Server最大的障碍,就是JDK1.4版之前的的串行垃圾收集机制会引起长时间的服务暂停,明白原理后,想想那些用JDK1.3写Server的先辈,不得不后怕。      好在JDK1.4已开始支持多线程并行的后台垃圾收集算法,JDK5.0则优化了默认值的设置。    一、参考资料:    Tuning Garbage Collection with the 5.0 J

小鱼的最爱 859

DeepSeek-LLM Base模型与Chat模型:差在哪,一次讲清怎么选

直接给结论:要聊天、问问题、写代码,选 DeepSeek-LLM-67B-Chat;要拿自己的数据微调出行业模型,选 DeepSeek-LLM-67B-Base。两者架构相同,差别只在训练流程的后半段。 ## 先说结论 判断标准很朴素:生成类任务(数学、代码、遵循指令)看 Chat,知识问答类任务看 Base。官方评测里,GSM8K 数学题 Chat 模型 **84.1%**、Base 模型

gitblog_01000的博客 405

RAG性能优化实战:分层缓存、智能路由与检索加速,实现降本增效

检索增强生成(RAG)作为连接大语言模型与外部知识库的关键技术,其核心原理是通过检索相关文档片段来增强生成模型的上下文,从而提升回答的准确性与事实性。这一架构的技术价值在于,它有效缓解了大模型的幻觉问题,并使其能够处理私有、动态的领域知识。在实际应用场景中,RAG被广泛用于智能客服、知识库问答和文档分析等系统。然而,工程落地时普遍面临响应延迟高与调用成本大的挑战。针对这些痛点,本文深入探讨了以分层缓存和智能路由为核心的优化体系。通过构建语义缓存、结果缓存和子答案缓存三级架构,并结合问题复杂度路由策略,能显著

weixin_30345577的博客 453

基于Milvus 2.6与RAG构建企业知识库问答系统实战

在非结构化数据爆发式增长的企业环境中,传统关键词检索难以理解自然语言中的语义差异。向量数据库通过Embedding模型将文本映射为高维向量,并借助相似度计算实现真正的语义检索,是构建知识库问答系统的基础设施。RAG(检索增强生成)通过先检索后生成的架构,结合大模型生成能力,有效补充私有知识并显著降低幻觉率。作为生产级开源向量数据库,Milvus 2.6支持HNSW等高效索引与标量混合过滤,为RAG链路中的召回环节提供稳定且可扩展的支撑。本文基于Milvus 2.6与RAG架构,详解从Docker Compo

weixin_34128839的博客 488

faunadb-js迁移指南:从v4到v10的平滑过渡策略

随着Fauna宣布FQL v4将于2025年6月30日停止服务,将您的项目从faunadb-js v4迁移到v10驱动程序变得迫在眉睫。本文将为您提供一份全面且简单的迁移指南,帮助您顺利完成这一过渡过程,确保您的应用在截止日期前平稳运行。 ## 为什么需要迁移到v10? Fauna已于2024年8月21日之后创建的账户强制使用FQL v10,而现有的v4账户也需要在2025年6月30日前完成迁

gitblog_00590的博客 1037
上一篇: 保持Oracle数据库的优良性能的几种办法
下一篇: 浅谈SQL Server数据库并发测试方法
常飞梦
常飞梦 领域专家: 数据库技术领域 领域专家: 数据库技术领域
博客等级 码龄21年 403粉丝 314原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值