查看 OceanBase 执行计划
使用benchmarksql压测数据库,产生高消耗的sql并测试数据库性能
压测环境部署
benchmarksql下载
git clone https://github.com/meiq4096/benchmarksql-5.0.git
修改配置文件
vi ./run/props.ob
db=oracle
driver=com.alipay.oceanbase.obproxy.mysql.jdbc.Driver
conn=jdbc:oceanbase://192.168.56.20:2883/tpcc?useUnicode=true&characterEncoding=utf-8
user=datax@mq_t1
password=datax
warehouses=2
loadWorkers=2
terminals=5
//To run specified transactions per terminal- runMins must equal zero
runTxnsPerTerminal=0
//To run for specified minutes- runTxnsPerTerminal must equal zero
runMins=3
//Number of total transactions per minute
limitTxnsPerMin=0
//Set to true to run in 4.x compatible mode. Set to false to use the
//entire configured database evenly.
terminalWarehouseFixed=true
//The following five values must add up to 100
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
// Directory name to create for collecting detailed result data.
// Comment this out to suppress.
resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
osCollectorScript=./misc/os_collector_linux.py
osCollectorInterval=1
数据准备
建表
[root@innodb-cluster01 run]# sh runSQL.sh props.ob sql.common/tableCreates.sql
runSQL.sh: line 14: source: funcs.sh: file not found
--问题
runSQL.sh 提示行数的funcs.sh改为绝对路径
调整数据库参数
set global autocommit=ON;
set global ob_query_timeout=36000000000;
set global ob_trx_timeout=36000000000;
set global max_allowed_packet=67108864;
set global ob_sql_work_area_percentage=100;
set global parallel_servers_target=800;
装载数据
[root@innodb-cluster01 run]# sh runLoader.sh props.ob
runLoader.sh: line 8: source: funcs.sh: file not found
--问题
runLoader.sh 提示行数的funcs.sh改为绝对路径
Starting BenchmarkSQL LoadData
driver=com.alipay.oceanbase.obproxy.mysql.jdbc.Driver
conn=jdbc:oceanbase://192.168.56.20:2883/tpcc?useUnicode=true&characterEncoding=utf-8
user=datax@mq_t1
password=***********
warehouses=2
loadWorkers=2
fileLocation (not defined)
csvNullValue (not defined - using default 'NULL')
Worker 000: Loading ITEM
Worker 001: Loading Warehouse 1
Worker 000: Loading ITEM done
Worker 000: Loading Warehouse 2
Worker 001: Loading Warehouse 1 done
Worker 000: Loading Warehouse 2 done
创建索引
cat sql.common/indexCreates.sql
alter table bmsql_warehouse add constraint bmsql_warehouse_pkey
primary key (w_id);
alter table bmsql_district add constraint bmsql_district_pkey
primary key (d_w_id, d_id);
alter table bmsql_customer add constraint bmsql_customer_pkey
primary key (c_w_id, c_d_id, c_id);
create index bmsql_customer_idx1
on bmsql_customer (c_w_id, c_d_id, c_last, c_first);
alter table bmsql_oorder add constraint bmsql_oorder_pkey
primary key (o_w_id, o_d_id, o_id);
create unique index bmsql_oorder_idx1
on bmsql_oorder (o_w_id, o_d_id, o_carrier_id, o_id);
alter table bmsql_new_order add constraint bmsql_new_order_pkey
primary key (no_w_id, no_d_id, no_o_id);
alter table bmsql_order_line add constraint bmsql_order_line_pkey
primary key (ol_w_id, ol_d_id, ol_o_id, ol_number);
alter table bmsql_stock add constraint bmsql_stock_pkey
primary key (s_w_id, s_i_id);
alter table bmsql_item add constraint bmsql_item_pkey
primary key (i_id);
性能测试
[root@innodb-cluster01 run]#sh runBenchmark.sh props.ob
10:46:22,654 [main] INFO jTPCC : Term-00,
10:46:22,658 [main] INFO jTPCC : Term-00, +-------------------------------------------------------------+
10:46:22,658 [main] INFO jTPCC : Term-00, BenchmarkSQL v5.0
10:46:22,658 [main] INFO jTPCC : Term-00, +-------------------------------------------------------------+
10:46:22,658 [main] INFO jTPCC : Term-00, (c) 2003, Raul Barbosa
10:46:22,658 [main] INFO jTPCC : Term-00, (c) 2004-2016, Denis Lussier
10:46:22,661 [main] INFO jTPCC : Term-00, (c) 2016, Jan Wieck
10:46:22,661 [main] INFO jTPCC : Term-00, +-------------------------------------------------------------+
10:46:22,661 [main] INFO jTPCC : Term-00,
10:46:22,661 [main] INFO jTPCC : Term-00, db=oracle
10:46:22,661 [main] INFO jTPCC : Term-00, driver=com.alipay.oceanbase.obproxy.mysql.jdbc.Driver
10:46:22,661 [main] INFO jTPCC : Term-00, conn=jdbc:oceanbase://192.168.56.20:2883/tpcc?useUnicode=true&characterEncoding=utf-8
10:46:22,661 [main] INFO jTPCC : Term-00, user=datax@mq_t1
10:46:22,662 [main] INFO jTPCC : Term-00,
10:46:22,662 [main] INFO jTPCC : Term-00, warehouses=2
10:46:22,662 [main] INFO jTPCC : Term-00, terminals=5
10:46:22,665 [main] INFO jTPCC : Term-00, runMins=3
10:46:22,665 [main] INFO jTPCC : Term-00, limitTxnsPerMin=0
10:46:22,665 [main] INFO jTPCC : Term-00, terminalWarehouseFixed=true
10:46:22,665 [main] INFO jTPCC : Term-00,
10:46:22,665 [main] INFO jTPCC : Term-00, newOrderWeight=45
10:46:22,665 [main] INFO jTPCC : Term-00, paymentWeight=43
10:46:22,666 [main] INFO jTPCC : Term-00, orderStatusWeight=4
10:46:22,666 [main] INFO jTPCC : Term-00, deliveryWeight=4
10:46:22,666 [main] INFO jTPCC : Term-00, stockLevelWeight=4
10:46:22,666 [main] INFO jTPCC : Term-00,
10:46:22,666 [main] INFO jTPCC : Term-00, resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
10:46:22,666 [main] INFO jTPCC : Term-00, osCollectorScript=./misc/os_collector_linux.py
10:46:22,666 [main] INFO jTPCC : Term-00,
10:46:22,679 [main] INFO jTPCC : Term-00, copied props.ob to my_result_2024-03-10_104622/run.properties
10:46:22,679 [main] INFO jTPCC : Term-00, created my_result_2024-03-10_104622/data/runInfo.csv for runID 7
10:46:22,680 [main] INFO jTPCC : Term-00, writing per transaction results to my_result_2024-03-10_104622/data/result.csv
10:46:22,681 [main] INFO jTPCC : Term-00, osCollectorScript=./misc/os_collector_linux.py
10:46:22,681 [main] INFO jTPCC : Term-00, osCollectorInterval=1
10:46:22,681 [main] INFO jTPCC : Term-00, osCollectorSSHAddr=null
10:46:22,681 [main] INFO jTPCC : Term-00, osCollectorDevices=null
10:46:22,754 [main] INFO jTPCC : Term-00,
10:46:23,088 [main] INFO jTPCC : Term-00, C value for C_LAST during load: 174
10:46:23,088 [main] INFO jTPCC : Term-00, C value for C_LAST this run: 246
10:46:23,088 [main] INFO jTPCC : Term-00,
Term-00, Running Average tpmTOTAL: 880.90 Current tpmTOTAL: 888 Memory Usage: 48MB / 236MB
Term-00, Running Average tpmTOTAL: 1330.69 Current tpmTOTAL: 12456 Memory Usage: 36MB / 228MB
Term-00, Running Average tpmTOTAL: 1069.82 Current tpmTOTAL: 20892 Memory Usage: 7MB / 219MB
Term-00, Running Average tpmTOTAL: 830.32 Current tpmTOTAL: 20472 Memory Usage: 9MB / 219MB
10:50:10,596 [Thread-5] INFO jTPCC : Term-00,
10:50:10,597 [Thread-5] INFO jTPCC : Term-00,
10:50:10,597 [Thread-5] INFO jTPCC : Term-00, Measured tpmC (NewOrders) = 380.2
10:50:10,597 [Thread-5] INFO jTPCC : Term-00, Measured tpmTOTAL = 830.32
10:50:10,597 [Thread-5] INFO jTPCC : Term-00, Session Start = 2024-03-10 10:46:23
10:50:10,597 [Thread-5] INFO jTPCC : Term-00, Session End = 2024-03-10 10:50:10
10:50:10,597 [Thread-5] INFO jTPCC : Term-00, Transaction Count = 3146
tpmC用来衡量IOPS.
Transaction用来衡量TPS.
分析top sql
查询top sql
SELECT sql_id, count(*), round(avg(elapsed_time)) avg_elapsed_time,
round(avg(execute_time)) avg_exec_time
FROM GV$OB_SQL_AUDIT s
WHERE DB_NAME='tpcc'
GROUP BY sql_id
order by avg_elapsed_time desc limit 10;
+----------------------------------+----------+------------------+---------------+
| sql_id | count(*) | avg_elapsed_time | avg_exec_time |
+----------------------------------+----------+------------------+---------------+
| B447DE16B3F42D2409B2A2BE50328E63 | 1 | 76518226 | 247658 |
| F59A700FA168324279B0DBC25E19760F | 1 | 76359957 | 64612631 |
| AB92F1B97A8D4DADFD477BB52C65A00B | 2 | 38008119 | 5118976 |
| AE32C84F890055A535A28B262C649D41 | 3 | 25339948 | 3428539 |
| F0EFFFCD85E71C241661E66EEA047C58 | 10 | 7604399 | 1026657 |
| 482BA7822AE7BE644CEBEB55213E7284 | 9 | 3071 | 3007 |
| AD9112FD1D4FF113292E5FE777B22F3C | 9 | 1693 | 1420 |
| 8D6E84735C0B8FB1823D199E2CA141C8 | 9 | 1586 | 1424 |
| EC66B09D06D688727D0F999BFCFF5348 | 9 | 816 | 115 |
| F95CD7A05C7064A028D76E0088B147F7 | 9 | 561 | 199 |
+----------------------------------+----------+------------------+---------------+
查询对应的前三个sql
obclient [oceanbase]> select sql_id,QUERY_SQL from GV$OB_SQL_AUDIT where sql_id in('B447DE16B3F42D2409B2A2BE50328E63','F59A700FA168324279B0DBC25E19760F','AB92F1B97A8D4DADFD477BB52C65A00B')\G
*************************** 1. row ***************************
sql_id: AB92F1B97A8D4DADFD477BB52C65A00B
QUERY_SQL: SELECT c_id FROM bmsql_customer WHERE c_w_id = 2 AND c_d_id = 9 AND c_last = 'ATIONOUGHTPRI' ORDER BY c_first
*************************** 2. row ***************************
sql_id: F59A700FA168324279B0DBC25E19760F
QUERY_SQL: SELECT count(*) AS low_stock FROM ( SELECT s_w_id, s_i_id, s_quantity FROM bmsql_stock WHERE s_w_id = 1 AND s_quantity < 12 AND s_i_id IN ( SELECT ol_i_id FROM bmsql_district JOIN bmsql_order_line ON ol_w_id = d_w_id AND ol_d_id = d_id AND ol_o_id >= d_next_o_id - 20 AND ol_o_id < d_next_o_id WHERE d_w_id = 1 AND d_id = 9 ) )
*************************** 3. row ***************************
sql_id: B447DE16B3F42D2409B2A2BE50328E63
QUERY_SQL: UPDATE bmsql_warehouse SET w_ytd = w_ytd + 4691.27 WHERE w_id = 2
*************************** 4. row ***************************
sql_id: AB92F1B97A8D4DADFD477BB52C65A00B
QUERY_SQL: SELECT c_id FROM bmsql_customer WHERE c_w_id = 1 AND c_d_id = 1 AND c_last = 'PRESPRESANTI' ORDER BY c_first
4 rows in set (0.009 sec)
使用explain查看sql的执行计划
obclient [oceanbase]> select sql_id,QUERY_SQL from GV$OB_SQL_AUDIT where sql_id in('B447DE16B3F42D2409B2A2BE50328E63','F59A700FA168324279B0DBC25E19760F','AB92F1B97A8D4DADFD477BB52C65A00B')\G
*************************** 1. row ***************************
sql_id: AB92F1B97A8D4DADFD477BB52C65A00B
QUERY_SQL: SELECT c_id FROM bmsql_customer WHERE c_w_id = 2 AND c_d_id = 9 AND c_last = 'ATIONOUGHTPRI' ORDER BY c_first
*************************** 2. row ***************************
sql_id: F59A700FA168324279B0DBC25E19760F
QUERY_SQL: SELECT count(*) AS low_stock FROM ( SELECT s_w_id, s_i_id, s_quantity FROM bmsql_stock WHERE s_w_id = 1 AND s_quantity < 12 AND s_i_id IN ( SELECT ol_i_id FROM bmsql_district JOIN bmsql_order_line ON ol_w_id = d_w_id AND ol_d_id = d_id AND ol_o_id >= d_next_o_id - 20 AND ol_o_id < d_next_o_id WHERE d_w_id = 1 AND d_id = 9 ) )
*************************** 3. row ***************************
sql_id: B447DE16B3F42D2409B2A2BE50328E63
QUERY_SQL: UPDATE bmsql_warehouse SET w_ytd = w_ytd + 4691.27 WHERE w_id = 2
*************************** 4. row ***************************
sql_id: AB92F1B97A8D4DADFD477BB52C65A00B
QUERY_SQL: SELECT c_id FROM bmsql_customer WHERE c_w_id = 1 AND c_d_id = 1 AND c_last = 'PRESPRESANTI' ORDER BY c_first
4 rows in set (0.009 sec)
obclient [tpcc]> explain SELECT c_id FROM bmsql_customer WHERE c_w_id = 2 AND c_d_id = 9 AND c_last = 'ATIONOUGHTPRI' ORDER BY c_first;
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Query Plan |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| =============================================================================== |
| |ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| |
| ------------------------------------------------------------------------------- |
| |0 |TABLE RANGE SCAN|bmsql_customer(bmsql_customer_idx1)|12 |5 | |
| =============================================================================== |
| Outputs & filters: |
| ------------------------------------- |
| 0 - output([bmsql_customer.c_id]), filter(nil), rowset=16 |
| access([bmsql_customer.c_id]), partitions(p0) |
| is_index_back=false, is_global_index=false, |
| range_key([bmsql_customer.c_w_id], [bmsql_customer.c_d_id], [bmsql_customer.c_last], [bmsql_customer.c_first], [bmsql_customer.c_id]), range(2,9,ATIONOUGHTPRI, |
| MIN,MIN ; 2,9,ATIONOUGHTPRI,MAX,MAX), |
| range_cond([bmsql_customer.c_w_id = 2], [bmsql_customer.c_d_id = 9], [bmsql_customer.c_last = 'ATIONOUGHTPRI']) |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
13 rows in set (0.006 sec)
obclient [tpcc]> explain SELECT count(*) AS low_stock FROM ( SELECT s_w_id, s_i_id, s_quantity FROM bmsql_stock WHERE s_w_id = 1 AND s_quantity < 12 AND s_i_id IN ( SELECT ol_i_id FROM bmsql_district JOIN bmsql_order_line ON ol_w_id = d_w_id AND ol_d_id = d_id AND ol_o_id >= d_next_o_id - 20 AND ol_o_id < d_next_o_id WHERE d_w_id = 1 AND d_id = 9 ) )
->
-> ;
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Query Plan |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ====================================================================== |
| |ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| |
| ---------------------------------------------------------------------- |
| |0 |SCALAR GROUP BY | |1 |42 | |
| |1 |└─NESTED-LOOP JOIN | |2 |42 | |
| |2 | ├─SUBPLAN SCAN |VIEW2 |2 |11 | |
| |3 | │ └─HASH DISTINCT | |2 |11 | |
| |4 | │ └─NESTED-LOOP JOIN | |2 |11 | |
| |5 | │ ├─TABLE RANGE SCAN|bmsql_order_line|30 |7 | |
| |6 | │ └─MATERIAL | |1 |3 | |
| |7 | │ └─TABLE GET |bmsql_district |1 |3 | |
| |8 | └─DISTRIBUTED TABLE GET |bmsql_stock |1 |21 | |
| ====================================================================== |
| Outputs & filters: |
| ------------------------------------- |
| 0 - output([T_FUN_COUNT(*)]), filter(nil), rowset=256 |
| group(nil), agg_func([T_FUN_COUNT(*)]) |
| 1 - output(nil), filter(nil), rowset=256 |
| conds(nil), nl_params_([VIEW2.VIEW1.ol_i_id(:3)]), use_batch=false |
| 2 - output([VIEW2.VIEW1.ol_i_id]), filter(nil), rowset=256 |
| access([VIEW2.VIEW1.ol_i_id]) |
| 3 - output([bmsql_order_line.ol_i_id]), filter(nil), rowset=256 |
| distinct([bmsql_order_line.ol_i_id]) |
| 4 - output([bmsql_order_line.ol_i_id]), filter(nil), rowset=256 |
| conds([bmsql_order_line.ol_o_id < bmsql_district.d_next_o_id], [bmsql_order_line.ol_o_id >= bmsql_district.d_next_o_id - 20]), nl_params_(nil), use_batch=false |
| 5 - output([bmsql_order_line.ol_o_id], [bmsql_order_line.ol_i_id]), filter(nil), rowset=256 |
| access([bmsql_order_line.ol_o_id], [bmsql_order_line.ol_i_id]), partitions(p0) |
| is_index_back=false, is_global_index=false, |
| range_key([bmsql_order_line.ol_w_id], [bmsql_order_line.ol_d_id], [bmsql_order_line.ol_o_id], [bmsql_order_line.ol_number]), range(1,9,MIN,MIN ; 1, |
| 9,MAX,MAX), |
| range_cond([bmsql_order_line.ol_w_id = 1], [bmsql_order_line.ol_d_id = 9]) |
| 6 - output([bmsql_district.d_next_o_id], [bmsql_district.d_next_o_id - 20]), filter(nil), rowset=256 |
| 7 - output([bmsql_district.d_next_o_id], [bmsql_district.d_next_o_id - 20]), filter([bmsql_district.d_next_o_id > bmsql_district.d_next_o_id - 20]), rowset=256 |
| access([bmsql_district.d_next_o_id]), partitions(p0) |
| is_index_back=false, is_global_index=false, filter_before_indexback[false], |
| range_key([bmsql_district.d_w_id], [bmsql_district.d_id]), range[1,9 ; 1,9], |
| range_cond([bmsql_district.d_w_id = 1], [bmsql_district.d_id = 9]) |
| 8 - output(nil), filter([bmsql_stock.s_quantity < 12]), rowset=256 |
| access([bmsql_stock.s_quantity]), partitions(p0) |
| is_index_back=false, is_global_index=false, filter_before_indexback[false], |
| range_key([bmsql_stock.s_w_id], [bmsql_stock.s_i_id]), range(MIN ; MAX), |
| range_cond([bmsql_stock.s_w_id = 1], [bmsql_stock.s_i_id = :3]) |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
42 rows in set (0.061 sec)
obclient [tpcc]> explain SELECT c_id FROM bmsql_customer WHERE c_w_id = 1 AND c_d_id = 1 AND c_last = 'PRESPRESANTI' ORDER BY c_first;
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Query Plan |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| =============================================================================== |
| |ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| |
| ------------------------------------------------------------------------------- |
| |0 |TABLE RANGE SCAN|bmsql_customer(bmsql_customer_idx1)|1 |4 | |
| =============================================================================== |
| Outputs & filters: |
| ------------------------------------- |
| 0 - output([bmsql_customer.c_id]), filter(nil), rowset=16 |
| access([bmsql_customer.c_id]), partitions(p0) |
| is_index_back=false, is_global_index=false, |
| range_key([bmsql_customer.c_w_id], [bmsql_customer.c_d_id], [bmsql_customer.c_last], [bmsql_customer.c_first], [bmsql_customer.c_id]), range(1,1,PRESPRESANTI, |
| MIN,MIN ; 1,1,PRESPRESANTI,MAX,MAX), |
| range_cond([bmsql_customer.c_w_id = 1], [bmsql_customer.c_d_id = 1], [bmsql_customer.c_last = 'PRESPRESANTI']) |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
13 rows in set (0.007 sec)
查看 OceanBase 执行计划的更多相关文章
- 如何查看MySQL执行计划
在介绍怎么查看MySQL执行计划前,我们先来看个后面会提到的名词解释: 覆盖索引: MySQL可以利用索引返回select列表中的字段,而不必根据索引再次读取数据文件 包含所有满足查询需要的数据的索引 ...
- 查看SQL执行计划
一用户进入某界面慢得要死,查看SQL执行计划如下(具体SQL语句就不完全公布了,截断的如下): call count cpu elapsed disk ...
- 查看Oracle执行计划的几种方法
查看Oracle执行计划的几种方法 一.通过PL/SQL Dev工具 1.直接File->New->Explain Plan Window,在窗口中执行sql可以查看计划结果.其中,Cos ...
- 查看Mysql执行计划
使用navicat查看mysql执行计划: 打开profile分析工具: 查看是否生效:show variable like ‘%profil%’; 查看进程:show processlist; 选择 ...
- Oracle查看SQL执行计划的方式
Oracle查看SQL执行计划的方式 获取Oracle sql执行计划并查看执行计划,是掌握和判断数据库性能的基本技巧.下面案例介绍了多种查看sql执行计划的方式: 基本有以下几种方式: ...
- EXPLAIN 查看 SQL 执行计划
EXPLAIN 查看 SQL 执行计划.分析索引的效率: id:id 列数字越大越先执行: 如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询. ...
- 查看Oracle执行计划
1.PL/SQL解释计划窗口 优点:方面 缺点:看到信息有限 2.explain_plan for 针对某个句子优化较方便 3.sqlplus Sqlplus里输入命令: set autotrace ...
- 查看ORACLE执行计划的几种常用方法
SQL的执行计划实际代表了目标SQL在Oracle数据库内部的具体执行步骤,作为调优,只有知道了优化器选择的执行计划是否为当前情形下最优的执行计划,才能够知道下一步往什么方向. 执行计划的定义:执行目 ...
- MySQL EXPLAIN 命令: 查看查询执行计划
MySQL 的 EXPLAIN 命令可以查看SELECT语句的执行的计划,是 MySQL 查询优化的必备工具. 通过执行计划可以了解查询方式.索引使用情况.需要扫描的数据量以及是否需要临时表或排序操作 ...
- plsql中查看sql执行计划
想要优化sql语句,可以从sql执行计划入手. 在plsql客户端,提供了一个方便的按钮来查看执行计划 选中需要查看的sql语句,点击此按钮,就可以看到该条语句的执行计划了. 结果集包括描述,用户,对 ...
随机推荐
- vue使用高德地图初始化坑
使用的时候有时候会报除Amap没有定义之外的错如 TypeError: v.w.uh is not a constructor Uncaught TypeError: Cannot read prop ...
- Fiddler抓包iOS手机配置全流程
前情 平时做移动移动端开必的时候经常需要抓包手机,用于接口请求跟踪,但iOS的抓包经常性的配不成功,经过踩过不少坑后终于知道了整个配置流程,此文记录Fiddler抓包iOS手机的配置流程. Step ...
- Excel VLOOKUP 函数入门教程
一.引言 在日常工作中,Excel 是处理数据的强大工具之一,而 VLOOKUP 函数作为 Excel 中最常用的查找函数之一,能够帮助用户在表格或数值数组中快速定位并返回所需的数据.它的工作原理是在 ...
- 第一个 milestone:内推 50 人拿到微软 offer!
就在昨天,我的一位候选人和我说,他已经通过面试,正在 offer 沟通阶段.由此,我达成第一个小里程碑:成功内推 50 人拿到了微软 offer! 内推了多少人? 从 2019 年年初开始内推,到现在 ...
- Qt音视频开发42-人脸识别客户端
一.前言 人脸识别客户端程序,不需要和人脸识别相关的库在一起,而是通过协议通信来和人脸识别服务端通信交互,人脸识别客户端和服务端程序框架,主要是为了提供一套通用的框架,按照定好的协议,实现人脸识别的相 ...
- FFmpeg命令行示例
1 提取视频流/音频流 // 分离视频流和音频流 ffmpeg -i input_file -vcodec copy -an output_file_video ffmpeg -i input_fil ...
- SpringBoot集成swagger后出现: Failed to start bean ‘documentationPluginsBootstrapper‘的解决方法
SpringBoot集成swagger后出现: Failed to start bean 'documentationPluginsBootstrapper'的编译错误: org.springfram ...
- 为什么 .NET8线程池 容易引发线程饥饿
一:背景 1. 讲故事 最近时间相对比较宽裕,多写点文章来充实社区吧,这篇文章主要还是来自于最近遇到的几例线程饥饿(Task.Result)引发的一系列的反思和总结,我觉得.NET8容易引发饥饿的原因 ...
- IntelliJ IDEA2020永久激活破解教程(无限试用)
IntelliJ IDEA2020激活破解教程(无限试用) 鉴于想拥有一个十分舒适的编程环境,我特意将自己的电脑运行内存从4G扩展到12G,加装一个256G的固态作为C盘,并且将系统升级为Window ...
- Windows bat批处理文件结束某个程序进程,删除文件夹
Windows bat批处理文件结束某个程序进程,删除文件夹 bat文件内容: @echo off setlocal :: 要结束的应用程序进程名 set "PROCESS_NAME=助手. ...