5 truy vấn sql tiêu tốn thời gian hàng đầu trong oracle năm 2022
Nội dung chính
SQL là gì? SQL là viết tắt của từ Structured Query Language, nghĩa là ngôn ngữ truy vấn cơ sở dữ liệu. Có thể coi SQL là ngôn ngữ chung mà bất cứ hệ thống cơ sở dữ liệu quan hệ (RDBMS) nào cũng phải đáp ứng. Đọc bài phỏng vấn của ITviec với anh Hồng Minh Trí – người có hơn 7 năm làm việc với SQL để biết đầy đủ về SQL là gì và Những tài liệu học SQL tham khảo cho người mới bắt đầu tìm hiểu về ngôn ngữ SQL.
SQL là gì?Trước khi tìm hiểu SQL là gì, ta cần biết đến các khái niệm cơ bản sau về cơ sở dữ liệu:
SQL là gì? SQL là viết tắt của Structured Query Language, nghĩa là ngôn ngữ truy vấn cơ sở dữ liệu. Có thể coi ngôn ngữ SQL là ngôn ngữ chung mà bất cứ hệ thống cơ sở dữ liệu quan hệ (RDBMS) nào cũng phải đáp ứng, điển hình như: Oracle Database, SQL Server, MySQL… (Còn “SQL Server là gì” sẽ được giải đáp ngay phần sau dưới đây của bài viết nhé.) Bất kì công ty nào lớn cũng cần xây dựng một hệ thống để lưu trữ cơ sở dữ liệu. Mọi thứ trong cơ sở dữ liệu này sẽ được quy ra thành nhiều bảng, có mối quan hệ với nhau. SQL giúp quản lý hiệu quả và truy vấn cơ sở dữ liệu thông tin nhanh hơn, giúp bảo trì thông tin dễ dàng hơn.
Để truy vấn cơ sở dữ liệu và lấy dữ liệu từ các bảng này (nhằm tổng hợp thành thông tin hữu ích nào đó), người ta dùng đến SQL thông qua các câu query. SQL Server là gì?SQL Server là gì? SQL Server – một phần mềm do Microsoft phát triển vào năm 1989, là hệ thống quản trị cơ sở dữ liệu quan hệ hay còn gọi là RDBMS (Relational Database Management System). SQL Server được dùng vào việc tạo, duy trì và lưu trữ, phân tích và trích xuất cơ sở dữ liệu theo yêu cầu. Các phiên bản hiện tại của SQL Server là gì? Hiện nay, Microsoft đang cung cấp các phiên bản SQL Server như sau được thiết kế cho từng đối tượng riêng biệt:
PL/SQL là gì?PL/SQL là gì? PL/SQL là viết tắt của Procedural Language/Structured Query Language – một loại ngôn ngữ thủ tục dùng cho Oracle. PL/SQL là một extension (mở rộng) của riêng Oracle. PL/SQL ra đời để hỗ trợ thêm cho web service. Nếu như SQL có nhiệm vụ truy vấn đến các bảng để trả về dữ liệu thì PL/SQL sẽ thực hiện những công đoạn tiếp theo như: đóng gói kết quả, xử lý cách hiển thị trên giao diện… Công việc của SQL DeveloperCông việc của một SQL Developer tùy thuộc vào yêu cầu của mỗi công ty. Anh Trí chia sẻ,
Công việc của một SQL Devloper sẽ:
Còn lại, công việc của một SQL cũng sẽ giống như những lập trình viên khác. Anh Trí chia sẻ thêm về công việc hiện tại của anh khi làm theo mô hình Scrum, chia ra làm nhiều Sprint khác nhau:
Ngoài giờ làm, anh Trí có sở thích chụp ảnh và đi du lịch đây đó Những tố chất nên có khi làm SQL là gì?Theo anh Trí, một người muốn làm về SQL thì nên sở hữu 3 tố chất sau đây:
Khi có tư duy lập trình, có nền tảng học về IT tại trường đại học rồi thì bạn sẽ làm quen với SQL rất nhanh. Về cơ bản, các ngôn ngữ lập trình chỉ khác nhau về cú pháp còn bản chất hay logic thì khá tương đồng. Tuy nhiên, anh Trí cũng chia sẻ thêm rằng điều này cũng không phải yếu tố bắt buộc vì anh thấy có nhiều bạn học kinh tế nhưng chuyển qua học và làm SQL cũng “ổn áp”.
Theo anh Trí, việc học tiếng Anh có nhiều lợi ích:
Nói về kinh nghiệm học tiếng Anh của mình thì anh chia sẻ rằng anh chủ yếu học qua trung tâm. Anh thực hành nói chuyện với thầy cô người bản xứ, làm bài tập về nhà, coi phim không phụ đề trên Youtube, cứ nghe đi nghe lại nhiều lần.
Làm việc với dữ liệu mà sai một ly là đi một dặm. Anh Trí khuyến khích người mới làm về SQL nên thường xuyên đọc lại log server để biết được nguyên nhân sâu xa gây phát sinh lỗi. Biết được nguyên nhân thì lần sau mới tránh lặp lại lỗi tương tự.
Lộ trình sự nghiệp khi theo SQL là gì?Cá nhân anh Trí thấy SQL Developer nói riêng, và Database Developer nói chung, có thể phát triển theo 2 hướng phát triển:
Bước tiếp theo thì bạn có thể phấn đấu để trở thành Data Architect – người thiết kế ra cơ sở dữ liệu cho doanh nghiệp. Muốn làm Data Architect thì yêu cầu bắt buộc là phải nắm rõ được hệ thống trước đã nhé. Ngoài ra, Data Scientist cũng là vị trí đáng cân nhắc. Ngoài kiến thức về SQL, em còn phải biết về xác suất thống kê và ngôn ngữ lập trình khác, thường là Python.
Những SQL Developer phát triển theo hướng quản lý thì có thể làm Business Analyst hoặc Project Manager.
Tài liệu học SQL tham khảoNếu bạn muốn tìm đọc sách về SQL là gì thì anh Trí gợi ý những tài liệu học SQL sau đây sẽ phù hợp với người mới bắt đầu:
Còn nếu muốn tìm hiểu riêng về Oracle SQL (cụ thể là PL/SQL), anh gợi ý như sau:
SQL Developer trong ngành IT nói gì?Anh Minh Trí chia sẻ về 3 lưu ý dành cho SQL Developer nhưng không ai dạy bạn cả:
Anh Trí chia sẻ rằng,
Tuy nhiên, thực tế thì mình học cái gì cũng vậy, nên nhìn ra thị trường và tiên đoán xem ngành mình đang làm có còn chỗ đứng trong 5-10 năm nữa hay không, có còn phát triển được nữa hay không. Nên mình có thể linh hoạt đáp ứng được xu thế của thị trường vì thị trường không thể đứng im mãi một chỗ được. Nên anh cũng khẳng định rằng các ngôn ngữ truy vấn cơ sở dữ liệu khác rất cần thiết cho developer.
Anh Trí kể về một trong những sai lầm mà anh đã từng mắc phải trong quá trình làm việc,
Chính về thế, SQL Developer nên nhớ là câu query có chạy tốt hay không còn phụ thuộc vào dữ liệu ở mỗi môi trường. Không nên dựa hoàn toàn vào môi trường development. Dữ liệu ở môi trường này ít hơn hẳn so với môi trường production. Kinh nghiệm của anh là nên chủ động test tất cả các trường hợp có thể xảy ra trên nhiều môi trường nhất có thể. Không nên thụ động, không chờ Tester la làng thì mới bắt tay vào sửa.
Có một sự thật ai cũng biết nhưng cũng cần phải nhắc lại đó là đi học và đi làm là hai môi trường hoàn toàn khác nhau. Anh Trí kể về câu chuyện của bản thân khi đi đến với “phát hiện” này:
Cảm ơn anh Trí vì những chia sẻ rất chân thật và hữu ích! Tiểu sử: Anh Hồng Minh Trí tốt nghiệp đại học Huflit ngành Software Engineering năm 2011. Anh đã từng làm việc cho rất nhiều công ty như FE Credit, Cosatech, BPC Banking Technologies, Amaris và hiện là PL/SQL Developer ở Hansen Technologies. Tính đến nay, anh Trí đã có hơn 7 năm kinh nghiệm làm việc với SQL, PL/SQL cũng như hệ thống quản trị cơ sở dữ liệu Oracle Database. Nếu bạn nghĩ những chia sẻ này có thể giúp ích cho bạn bè hoặc đồng nghiệp, đừng quên nhấn nút Share bên dưới nhé! Và đừng quên tham khảo việc làm SQL Developer tại ITviec! Được liệt kê dưới đây là một số truy vấn SQL mà tôi thấy đặc biệt hữu ích cho việc điều chỉnh hiệu suất. Chúng dựa trên Lịch sử phiên hoạt động V $ View để có được quan điểm hiện tại về hiệu suất và các bảng Lịch sử DBA_HIST_* AWR để có được dữ liệu hiệu suất liên quan đến một khoảng thời gian trong quá khứ. Tôi muốn nói thêm rằng các truy vấn này đã được tôi tùy chỉnh dựa trên các tập lệnh SQL thu được từ các đồng nghiệp và đồng nghiệp. Vì vậy, nếu tôi đang vi phạm bất kỳ tài liệu bản quyền nào cho tôi biết và tôi sẽ loại bỏ như vậy. Ngoài ra, nếu bất cứ ai có bất kỳ tập lệnh hữu ích tương tự nào để đóng góp cho cộng đồng, hãy gửi nó cho tôi và tôi sẽ bao gồm cùng một Các sự kiện chờ đợi hàng đầu gần đâycol EVENT format a60 select * from ( select active_session_history.event, sum(active_session_history.wait_time + active_session_history.time_waited) ttl_wait_time from v$active_session_history active_session_history where active_session_history.event is not null group by active_session_history.event order by 2 desc) where rownum < 6 / Các sự kiện chờ đợi hàng đầu kể từ khi khởi động ví dụcol event format a60 select event, total_waits, time_waited from v$system_event e, v$event_name n where n.event_id = e.event_id and n.wait_class !='Idle' and n.wait_class = (select wait_class from v$session_wait_class where wait_class !='Idle' group by wait_class having sum(time_waited) = (select max(sum(time_waited)) from v$session_wait_class where wait_class !='Idle' group by (wait_class))) order by 3; Danh sách người dùng hiện đang chờ đợicol username format a12 col sid format 9999 col state format a15 col event format a50 col wait_time format 99999999 set pagesize 100 set linesize 120 select s.sid, s.username, se.event, se.state, se.wait_time from v$session s, v$session_wait se where s.sid=se.sid and se.event not like 'SQL*Net%' and se.event not like '%rdbms%' and s.username is not null order by se.wait_time; Tìm các sự kiện chờ cơ sở dữ liệu chính trong một khoảng thời gian cụ thểTrước tiên, hãy xác định các giá trị ID ảnh chụp nhanh trong khoảng thời gian được đề cập. Trong ví dụ này, chúng tôi cần tìm SNAP_ID cho khoảng thời gian từ 10 giờ tối đến 11 giờ tối vào ngày 14 tháng 11 năm 2012. select snap_id,begin_interval_time,end_interval_time from dba_hist_snapshot where to_char(begin_interval_time,'DD-MON-YYYY')='14-NOV-2012' and EXTRACT(HOUR FROM begin_interval_time) between 22 and 23; Đặt xác minh TẮT Chọn * từ (chọn Active_Session_History.Event, sum (active_session_history.wait_time + active_session_history.time_waited) ttl_wait_time từ dba_hist_active CPU tiêu thụ CPU hàng đầu trong một khoảng thời gian nhất địnhLưu ý - Trong trường hợp này, chúng tôi đang tìm thấy 5 câu lệnh SQL chuyên sâu CPU hàng đầu được thực hiện trong khoảng thời gian từ 9.00 sáng đến 11 giờ sáng select * from ( select SQL_ID, sum(CPU_TIME_DELTA), sum(DISK_READS_DELTA), count(*) from DBA_HIST_SQLSTAT a, dba_hist_snapshot s where s.snap_id = a.snap_id and s.begin_interval_time > sysdate -1 and EXTRACT(HOUR FROM S.END_INTERVAL_TIME) between 9 and 11 group by SQL_ID order by sum(CPU_TIME_DELTA) desc) where rownum Đối tượng cơ sở dữ liệu nào trải qua số lượng chờ đợi nhiều nhất trong một giờ quaset linesize 120 col event format a40 col object_name format a40 select * from ( select dba_objects.object_name, dba_objects.object_type, active_session_history.event, sum(active_session_history.wait_time + active_session_history.time_waited) ttl_wait_time from v$active_session_history active_session_history, dba_objects where active_session_history.sample_time between sysdate - 1/24 and sysdate and active_session_history.current_obj# = dba_objects.object_id group by dba_objects.object_name, dba_objects.object_type, active_session_history.event order by 4 desc) where rownum < 6; Các phân đoạn hàng đầu được đặt hàng bởi các bài đọc vật lýcol segment_name format a20 col owner format a10 select segment_name,object_type,total_physical_reads from ( select owner||'.'||object_name as segment_name,object_type, value as total_physical_reads from v$segment_statistics where statistic_name in ('physical reads') order by total_physical_reads desc) where rownum Top 5 câu lệnh SQL trong một giờ quaselect * from ( select active_session_history.sql_id, dba_users.username, sqlarea.sql_text, sum(active_session_history.wait_time + active_session_history.time_waited) ttl_wait_time from v$active_session_history active_session_history, v$sqlarea sqlarea, dba_users where active_session_history.sample_time between sysdate - 1/24 and sysdate and active_session_history.sql_id = sqlarea.sql_id and active_session_history.user_id = dba_users.user_id group by active_session_history.sql_id,sqlarea.sql_text, dba_users.username order by 4 desc ) where rownum SQL với I/O cao nhất trong một ngày quaselect * from ( SELECT /*+LEADING(x h) USE_NL(h)*/ h.sql_id , SUM(10) ash_secs FROM dba_hist_snapshot x , dba_hist_active_sess_history h WHERE x.begin_interval_time > sysdate -1 AND h.SNAP_id = X.SNAP_id AND h.dbid = x.dbid AND h.instance_number = x.instance_number AND h.event in ('db file sequential read','db file scattered read') GROUP BY h.sql_id ORDER BY ash_secs desc ) where rownum Các truy vấn tiêu thụ CPU hàng đầu kể từ một ngày quaselect * from ( select SQL_ID, sum(CPU_TIME_DELTA), sum(DISK_READS_DELTA), count(*) from DBA_HIST_SQLSTAT a, dba_hist_snapshot s where s.snap_id = a.snap_id and s.begin_interval_time > sysdate -1 group by SQL_ID order by sum(CPU_TIME_DELTA) desc) where rownum Tìm SQL hàng đầu là những gì được báo cáo cụ thể trong ngàyTrước tiên, hãy xác định các giá trị ID ảnh chụp nhanh trong khoảng thời gian được đề cập. Trong ví dụ này, chúng tôi cần tìm SNAP_ID cho khoảng thời gian từ 10 giờ tối đến 11 giờ tối vào ngày 14 tháng 11 năm 2012. select snap_id,begin_interval_time,end_interval_time from dba_hist_snapshot where to_char(begin_interval_time,'DD-MON-YYYY')='14-NOV-2012' and EXTRACT(HOUR FROM begin_interval_time) between 22 and 23; col event format a60 select event, total_waits, time_waited from v$system_event e, v$event_name n where n.event_id = e.event_id and n.wait_class !='Idle' and n.wait_class = (select wait_class from v$session_wait_class where wait_class !='Idle' group by wait_class having sum(time_waited) = (select max(sum(time_waited)) from v$session_wait_class where wait_class !='Idle' group by (wait_class))) order by 3;1 Đặt xác minh TẮT Chọn * từ (chọn Active_Session_History.Event, sum (active_session_history.wait_time + active_session_history.time_waited) ttl_wait_time từ dba_hist_activecol event format a60 select event, total_waits, time_waited from v$system_event e, v$event_name n where n.event_id = e.event_id and n.wait_class !='Idle' and n.wait_class = (select wait_class from v$session_wait_class where wait_class !='Idle' group by wait_class having sum(time_waited) = (select max(sum(time_waited)) from v$session_wait_class where wait_class !='Idle' group by (wait_class))) order by 3;2 CPU tiêu thụ CPU hàng đầu trong một khoảng thời gian nhất địnhcol event format a60 select event, total_waits, time_waited from v$system_event e, v$event_name n where n.event_id = e.event_id and n.wait_class !='Idle' and n.wait_class = (select wait_class from v$session_wait_class where wait_class !='Idle' group by wait_class having sum(time_waited) = (select max(sum(time_waited)) from v$session_wait_class where wait_class !='Idle' group by (wait_class))) order by 3;3 Lưu ý - Trong trường hợp này, chúng tôi đang tìm thấy 5 câu lệnh SQL chuyên sâu CPU hàng đầu được thực hiện trong khoảng thời gian từ 9.00 sáng đến 11 giờ sángcol event format a60 select event, total_waits, time_waited from v$system_event e, v$event_name n where n.event_id = e.event_id and n.wait_class !='Idle' and n.wait_class = (select wait_class from v$session_wait_class where wait_class !='Idle' group by wait_class having sum(time_waited) = (select max(sum(time_waited)) from v$session_wait_class where wait_class !='Idle' group by (wait_class))) order by 3;4 Làm cách nào để tìm thấy 10 truy vấn chạy dài hàng đầu trong Oracle?Truy vấn chế độ xem V $ session_longops để tìm các truy vấn dài. V $ session_longops hiển thị trạng thái của các hoạt động khác nhau chạy dài hơn 6 giây (trong thời gian tuyệt đối). to find long-running queries. V$SESSION_LONGOPS displays the status of various operations that run for longer than 6 seconds (in absolute time).
Truy vấn nào nhanh hơn trong SQL?Sử dụng trường hợp thay vì câu lệnh cập nhật mất nhiều thời gian hơn câu lệnh CASE do ghi nhật ký.Mặt khác, câu lệnh CASE xác định những gì cần được cập nhật và làm cho các truy vấn SQL của bạn nhanh hơn.
UPDATE statement takes longer than CASE statement due to logging. On the other hand, CASE statement determines what needs to be updated and makes your SQL queries faster.
Làm cách nào để làm truy vấn SQL chạy nhanh hơn trong Oracle?Thực tiễn tốt nhất để điều chỉnh truy vấn trong Oracle.. Thực hành tốt nhất 1: Làm rõ mục tiêu..... Thực hành tốt nhất 2: Xác định các câu lệnh SQL có tác động cao..... Thực hành tốt nhất 3: Xác định kế hoạch thực hiện của bạn..... Thực hành tốt nhất 4: Tránh quét lớn..... Thực hành tốt nhất 5: Tối ưu hóa chọn..... Thực hành tốt nhất 6: Sử dụng công cụ của bên thứ ba .. Làm cách nào để tìm thấy 10 truy vấn chạy dài hàng đầu trong SQL Server?Dưới đây là các bước để tìm truy vấn chạy dài trong SQL Server.. Chọn Top 20 khác biệt .. Est.Text như truy vấn,. Db_name(dbid),. eqs.execut_count là Exec_cnt,. EQS.MAX_ELAPSED_TIME là MAX_ELAPSED_TIME,. Isnull (eqs.total_elapsed_time / nullif (eqs.execut_count, 0), 0) là avg_elapsed_time,. |