Hiển thị các bài đăng có nhãn Admin > Index. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Admin > Index. Hiển thị tất cả bài đăng

Thứ Sáu, 8 tháng 9, 2023

[VIP5] Bỏ index Primary Key, tạo index thường để tăng hiệu năng cơ sở dữ liệu

Mục đích: Với Primary Key thì mỗi khi insert giá trị mới vào database phải kiểm tra xem có bị trùng và hác null hay không, nếu ứng dụng không cần tới Primary (do ứng dụng kiểm soát được) thì có thể giảm gánh nặng đối với database bằng cách tạo index thường, từ đó góp phần tăng hiệu năng của cơ sở dữ liệu. Với database Core khi hệ thống đang chạy ổn định kể ra động vào cũng hơi ngại vì tăng hiệu năng 1 chút thì không ai biết nhưng mà tối ưu gây cao tải thì "lên báo" ngay, mà không làm cũng không được. Dở nhất là cập nhật buổi tối test OK, nhưng sáng lúc cao tải mới có thể phát sinh lỗi thì rollback không kịp. Nên anh em càng nắm hệ thống Core càng phải rèn luyện bản lĩnh vững vàng, làm trên testbed đầy đủ (nhưng testbed cũng chỉ tham khảo vì khó giả lập môi trường giống như thật lắm).
Sau đây tôi sẽ chia sẻ với anh/em thủ tục chi tiết:
Sửa bài viết

Thứ Sáu, 13 tháng 1, 2023

Tăng tốc database Index phần 13 Merge

Đã lâu không quay lại chủ đề này, vì trước mấy ku em bảo mình viết hàn lâm khó hiểu quá nên mình chuyển qua dạng vấn đáp xem có dễ hiểu hơn chút nào không? Các bạn có góp ý vui lòng comment nhé!
Sửa bài viết

Tăng tốc database Index phần 12 với LIKE

Nếu các bạn chưa đọc bài trước có thể đọc tại link Tăng tốc database phần 11 Tìm kiếm theo Khoảng, Lớn Hơn, Nhỏ Hơn, và BETWEEN

Truy vấn với Like nhiều lúc rất hiệu quả, nhiều lúc lại rất chậm. Có thể một số từ khóa được đánh index tốt, một số thì không. Nhiều lúc vị trí của wild card có thể cho kết quả rất khác nhau. VÍ dụ dùng % wild card ở giữa từ khóa

Sửa bài viết

Tăng tốc database index phần 11 Tìm kiếm theo Khoảng, Lớn Hơn, Nhỏ Hơn, và BETWEEN

Nếu các bạn chưa đọc bài trước có thể đọc tại đây (10 - Query với tham số)

Các phép toán lớn hơn (>) nhỏ hơn (<) và BETWEEN cũng có thể sử dụng index giống toán tử bằng (=), thậm chí kể cả toán tử LIKE cũng có thể dùng được trong một số trường hợp. Việc dùng index kiểu này có giới hạn nếu đánh index trong một index chứa nhiều cột và chọn cột nào trước, cột nào sau. Nhiều khi không thể chọn được thứ tự đúng.

Sửa bài viết

Tăng tốc database index phần 10 - Query với tham số

Nếu các bạn chưa đọc bài trước có thể đọc tại link Tăng tốc database index phần 9 - Function- User-Defined Function

Có hai cách để truyền dữ liệu vào database, một là truyền trực tiếp qua câu lệnh, hai là truyền qua tham số, thường là sử dụng ?, :name or @name và truyền giá trị tương ứng qua lời gọi.

Sửa bài viết

Thứ Tư, 14 tháng 12, 2022

Thứ Tư, 21 tháng 9, 2022

Invisible Index trong Oracle Database

Invisible index được giới thiệu từ oracle 11g. Như tên gọi bc ủa nó, index này sẽ bị bỏ qua bởi optimizer khi phân tích plan câu lệnh, nó được coi như không tồn tại. 

Sửa bài viết

Thứ Hai, 18 tháng 4, 2022

Hướng dẫn khắc phục lỗi ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired và [1]: ORA-08104: this index object 5381076 is being online built or rebuilt

Bài toán: 

Khi tạo index nhầm (đáng nhẽ tạo local thì lại quên từ khóa local nên tạo nhầm thành global) nên ta cần xóa đi:

create index        app_owner.tab1_i7 on app_owner.tab1(status) parallel 8 online tablespace indx ;
alter index app_owner.tab1_i7 noparallel;

Giải pháp:

--Xóa index
drop index app_owner.tab1_i7;

[1]: ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

-- Kill các lock vào bảng tab1
SELECT /*lock table*/  'kill -9 ' || spid a, a.INST_ID,A.SQL_ID,A.SID, A.SERIAL#, a.USERNAME, a.STATUS,A.SCHEMANAME,a.OSUSER,A.MACHINE,A.PROGRAM,A.TYPE,A.LOGON_TIME,BACKGROUND
FROM gv$session a, gv$process b 
WHERE b.addr = a.paddr   
AND a.inst_id=b.inst_id 
--and b.inst_id=3
AND (b.inst_id, a.sid) in
(SELECT /*+ parallel(8)*/ s.inst_id,s.sid
FROM gv$locked_object v, dba_objects d,
gv$lock l, gv$session s
WHERE v.object_id = d.object_id
AND (v.object_id = l.id1)
AND v.session_id = s.sid
and object_name=upper('tab1'))
--and type='USER'
--ORDER BY username, session_id;
order by inst_id;

-- Tạo lại index:
create index        app_owner.tab1_i7 on app_owner.tab1(status) parallel 8 online tablespace indx local;
alter index app_owner.tab1_i7 noparallel;

Phát sinh lỗi bên dưới:

[1]: ORA-08104: this index object 5381076 is being online built or rebuilt

-- Clean index tạo lỗi
DECLARE 
RetVal BOOLEAN;
OBJECT_ID BINARY_INTEGER;
WAIT_FOR_LOCK BINARY_INTEGER;
BEGIN 
OBJECT_ID := 5381076;
WAIT_FOR_LOCK := NULL;
RetVal := SYS.DBMS_REPAIR.ONLINE_INDEX_CLEAN (OBJECT_ID);
COMMIT; 
END; 
/

-- Tạo lại index
create index        app_owner.tab1_i7 on app_owner.tab1(status) parallel 8 online tablespace indx local;
alter index app_owner.tab1_i7 noparallel;

Hy vọng hữu ích cho bạn.
=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile: 0902912888
⚡️ Skype: tranbinh48ca
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,khóa học pl/sql, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, securecrt, xshell, mobaxterm, putty
Sửa bài viết

Thứ Hai, 28 tháng 2, 2022

Hiểu về index partition, phân biệt local index và global index

Mục đích: 

Index tạo trên bảng partition có thể là partition hoặc nonpartition, với partition index giúp dễ dàng quản lý, tăng tính sẵn sàng, hiệu năng cao hơn và khả năng mở rộng tốt hơn. Bạn có thể tạo partititioin độc lập (global index) hoặc tự động ánh xạ 1-1 với partition của table (local index). Nhưng nhìn chung bạn nên tạo global index cho ứng dụng OLTP (do nhiều khi không quét theo trường partition key của bảng được) và local index cho ứng dụng data warehousing hoặc DSS (decision support system).

Qua bài viết này hy vọng sẽ giúp bạn Hiểu về index partition, phân biệt local index và global index. 
Sửa bài viết

Thứ Năm, 26 tháng 8, 2021

Oracle Database index monitoring

Mục đích:  Monitor index xem index có được sử dụng hay không nếu index không sử dụng, tạo thừa thì chúng ta sẽ xóa đi. Việc xóa index nhỏ thì đơn giản nhưng index lớn của bảng to.

Sửa bài viết

Thứ Năm, 20 tháng 5, 2021

[VIP] Tạo index bảng core, huge table (> 1, 2, ...15 tỷ bản ghi) trong Oracle Database

Bài toán: 

Với bảng dữ liệu rất lớn hoặc bảng core, giả sử bảng > 1 tỷ bản ghi, ví dụ bảng này 6,7 tỷ bản ghi như dưới:


Dữ liệu bảng này partition theo ngày từ 2014 chẳng hạn:

....

Thì việc tạo index với câu lệnh :

create index user1.tab1_I1 on user1.tab1(col1,col2, col3, col4) tablespace INDX local;

Sẽ chạy rất lâu và làm gây lock memory (library cache lock) và treo DB.


GIÁI PHÁP:

Tạo index local unusable sau đó rebuild từng partition từ mới đến cũ vì thường quét 1 vài ngày hoặc 1 vài tháng dữ liệu mới nhất, chi tiết:
Sửa bài viết

Thứ Năm, 25 tháng 2, 2021

Tạo lại index bảng Core không may drop nhầm

 
Mục đích:
Trong quá trình tối ưu, đánh giá 1 index mình thấy không cần thiết mặc dù đã bật monitoring lên nhưng khi drop đi lại gây cao tải cho Oracle Database do bảng này là bảng core,  nhiều giao dịch.
Sửa bài viết

Thứ Bảy, 6 tháng 2, 2021

Tạo index bảng core, bảng CỰC LỚN (2-15 tỷ row)


Khi tạo lại index partition bảng core, index lớn (hàng 2-3-4-15 tỷ bản ghi), nếu bạn tạo bình thường sẽ TREO DB do đó cần có bí kíp để tạo, hôm nay tôi sẽ chia sẻ bí mật đó cho bạn.

Đó là tạo unusable sau đó rebuild từng partition từ mới đến cũ vì thường quét 1 vài ngày hoặc 1 vài tháng dữ liệu mới nhất
Sửa bài viết

Thứ Năm, 10 tháng 12, 2020

Cách tạo FUNCTION INDEX trong Oracle Database


1. Tạo index tăng tốc độ truy vấn tên nhân viên:
Câu lệnh:
SELECT * FROM emp WHERE UPPER(emp_name) LIKE 'JOH%';

Tạo index:
CREATE INDEX idx ON emp (UPPER(emp_name));

Câu lệnh
SELECT id, geo, area(geo), desc
     FROM rivers     
     WHERE area(geo) >5000

Tạo index:
CREATE INDEX area_index ON rivers (area(geo));
Sửa bài viết

Cách tạo FUNCTION INDEX trong Oracle Database


1. Tạo index tăng tốc độ truy vấn tên nhân viên:
Câu lệnh:
SELECT * FROM emp WHERE UPPER(emp_name) LIKE 'JOH%';

Tạo index:
CREATE INDEX idx ON emp (UPPER(emp_name));

Câu lệnh
SELECT id, geo, area(geo), desc
     FROM rivers     
     WHERE area(geo) >5000

Tạo index:
CREATE INDEX area_index ON rivers (area(geo));
Sửa bài viết

Cơ chế làm việc của Index trong Oracle Database

B-Tree indexes (sau đây gọi là index) là một object có cấu trúc, chúng ta có thể coi nó như là 1 table cũng được. Tuy nhiên chúng được sắp xếp theo dạng B-Tree (cây nhị phân) để phục vụ cho việc tìm kiếm nhanh. Nó bao gồm các thông tin sau: 

- Index key: chứa các trường dữ liệu làm key khi tạo index 

- RowID: là ROWID tương ứng với dòng dữ liệu chứa index key. 
Sửa bài viết

Thứ Ba, 1 tháng 12, 2020

Script rebuild index theo ngày, tháng, năm trong Oracle Database

---index theo nam
DECLARE
   v_nam          varchar2(4) := '2012';
   v_tablespace   varchar2(50):='INDX';
   cursor c1 is  
--     select table_owner,table_name,max(partition_name)
--     from dba_tab_partitions group by table_owner,table_name having max(partition_name) like '%'||v_nam||'%' and length(max(partition_name))<9;
     select table_owner,table_name,max(partition_name)
     from dba_tab_partitions where table_name='table1' group by table_owner,table_name;
Sửa bài viết

Quản lý Index Partition trong Oracle Database

--1.CHECK
select a.* from DBA_PART_INDEXES a, DBA_TAB_PARTITIONS b where a.owner=B.TABLE_OWNER and a.table_name=B.TABLE_NAME and a.owner not like 'SYS%' and b.partition_name like '%20131231';

-- Script rebuild index partititon unusable
select 'alter index ' || index_owner || '.' || index_name || ' rebuild partition ' || partition_name || ' tablespace INDX nologging parallel 8 online;' from dba_ind_partitions where status='UNUSABLE';


-- Script rebuild các partition index 
--+ Bước 1: Rebuild
select 'alter index ' || index_owner || '.' || index_name || ' rebuild partition ' || partition_name || ' tablespace INDX' ||substr(partition_name,5,4)||' nologging parallel 8 online;' from dba_ind_partitions where 
index_owner='APP_OWNER'
and index_name in (
'index_name_1',
'index_name_2'
)
order by partition_name desc
;
--+ Bước 2: Nologging noparallel
alter index app_owner.index_name_1 noparallel nologging;
alter index app_owner.index_name_2 noparallel nologging;

Sửa bài viết

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master