Database
 sql >> Baza danych >  >> RDS >> Database

Używanie strace jako narzędzia do debugowania DG40DBC w systemie Linux

Niedawno klient, który używał naszego sterownika ODBC SQL Server do łączenia Oracle z SQL Server, napotkał problem, który okazał się trudny do rozwiązania.

Klient otrzymywał dziennik Menedżera sterowników ODBC za każdym razem, gdy był używany DG4ODBC, co powodowało spadek wydajności — rejestrowanie wywołań ODBC wiąże się z kosztami wydajności. Klient sprawdził plik odbcinst.ini pod kątem wpisów umożliwiających rejestrowanie; te wpisy nie były obecne.

Aby rozwiązać ten problem, użyliśmy narzędzia strace, aby odkryć, co działo się „za kulisami”, gdy używany był DG4ODBC.

Ponieważ DG4ODBC jest biblioteką, a nie aplikacją, musieliśmy dołączyć strace do procesu nasłuchującego Oracle (aplikacja „nadrzędna” DG4ODBC), aby śledzić operacje związane z DG4ODBC.

Plik śledzenia pokazał, która kopia odbcinst.ini umożliwiała rejestrowanie.

Oto kroki, które podjęliśmy, aby dołączyć strace do programu nasłuchującego Oracle:

$ ps -aef | grep tns*
oracle   16242     1  0 15:02 ?        00:00:00 /u01/app/oracle/product/11.2.0/xe/bin/tnslsnr LISTENER -inherit

$ sudo strace -p 16242 -f -o /tmp/mytracefile

(W osobnym oknie terminala):

$ ./sqlplus / as sysdba

$ select * from mytable@mylink;

To, co Oracle zrobiło „pod maską”, jest teraz rejestrowane w /tmp/mytracefile. Następnie użyliśmy ctrl-c, aby zatrzymać strace i wyszukaliśmy plik sql.log (plik dziennika Menedżera sterowników ODBC) w /tmp/mytracefile. W naszym przypadku pokazało to:

16436 open("/etc/odbcinst.ini", O_RDONLY) = 7
16436 fstat(7, {st_mode=S_IFREG|0644, st_size=1365, ...}) = 0
16436 read(7, "[ODBC]\nTrace=Yes\nTraceFile=/tmp/"..., 4096) = 1365
16436 read(7, "", 4096)                 = 0
16436 close(7)                          = 0
16436 open("/u01/app/oracle/.odbcinst.ini", O_RDONLY) = -1 ENOENT (No such file or directory)
16436 open("/tmp/sql.log", O_WRONLY|O_CREAT|O_APPEND, 0666) = 7 

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sterownik ODBC PayPal

  2. Zrozumienie utraty zdarzeń z rozszerzonymi zdarzeniami

  3. Czy ewolucja danych kontaktowych oznacza zmianę bazy danych?

  4. PRZYPADEK SQL:Poznaj i unikaj 3 mniej znanych kłopotów

  5. Czym jest schemat w SQL i jak go stworzyć?