In this post we are simply going to retrieve the restaurants from the city of Lyon-France from Open Street Map, and then plot them with Bokeh.
Downloading the restaurants name and coordinates is done using a fork of the great OSMnx library. The OSM-POI feature of this fork will probably soon be added to OSMnx from what I understand (issue).
First we create a fresh conda env, install jupyterlab, bokeh (the following lines show the Linux way to do it but a similar thing could be done with Windows):
$ conda create -n restaurants python=3.6
$ source activate restaurants
$ conda install jupyterlab
$ conda install -c bokeh bokeh
$ jupyter labextension install jupyterlab_bokeh
$ jupyter lab osm_restaurants.ipynb
The jupyterlab extension allows the rendering of JS Bokeh content.
Then we need to install the POI fork of OSMnx:
$ git clone Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.:HTenkanen/osmnx.git
$ cd osmnx/
osmnx $ git checkout 1-osm-poi-dev
osmnx $ pip install .
osmnx $ cd ..
And we are ready to run the notebook:
jupyter lab osm_restaurants.ipynb
import osmnx as ox
place = "Lyon, France"
restaurant_amenities = ['restaurant', 'cafe', 'fast_food']
restaurants = ox.pois_from_place(place=place,
amenities=restaurant_amenities)[['geometry',
'name',
'amenity',
'cuisine',
'element_type']]
We are looking for 3 kinds of amenity related to food: restaurants, cafés and fast-foods. The collected data is returned as a geodataframe, which is basically a Pandas dataframe associated with a geoserie of Shapely geometries. Along with the geometry, we are only keeping 4 columns:
restaurants.head()
ax = restaurants.plot()
A script for SQL Server to be run as sysadmin or a user that have enought priviledges on all databases to list all tables :
CREATE PROCEDURE [dbo].[sp_get_tables_sizes_all_dbs] AS BEGIN --sqlserver 2005 + IF (SELECT count(*) FROM tempdb.sys.objects WHERE name = '##TABLESIZES_ALLDB')=1 BEGIN DROP TABLE ##TABLESIZES_ALLDB; END CREATE TABLE ##TABLESIZES_ALLDB ( snapdate datetime, srv nvarchar(1000), sv nvarchar(1000), _dbname nvarchar(1000), nomTable nvarchar(1000), "partition_id" bigint, "partition_number" int, lignes bigint, "memory (kB)" bigint, "data (kB)" bigint, "indexes (kb)" bigint, "data_compression" int, data_compression_desc nvarchar(1000) ) EXECUTE master.sys.sp_MSforeachdb 'USE [?]; insert into ##TABLESIZES_ALLDB select getdate() as snapdate,cast(serverproperty(''MachineName'') as nvarchar(1000)) svr,cast(@@servicename as nvarchar(1000)) sv, ''?'' _dbname, nomTable= object_name(p.object_id),p.partition_id,p.partition_number, lignes = sum( CASE When (p.index_id < 2) and (a.type = 1) Then p.rows Else 0 END ), ''memory (kB)'' = cast(ltrim(str(sum(a.total_pages)* 8192 / 1024.,15,0)) as float), ''data (kB)'' = ltrim(str(sum( CASE When a.type <> 1 Then a.used_pages When p.index_id < 2 Then a.data_pages Else 0 END ) * 8192 / 1024.,15,0)), ''indexes (kb)'' = ltrim(str((sum(a.used_pages)-sum( CASE When a.type <> 1 Then a.used_pages When p.index_id < 2 Then a.data_pages Else 0 END) )* 8192 / 1024.,15,0)),p.data_compression, p.data_compression_desc from sys.partitions p, sys.allocation_units a ,sys.sysobjects s where p.partition_id = a.container_id and p.object_id = s.id and s.type = ''U'' -- User table type (system tables exclusion) group by p.object_id,p.partition_id,p.partition_number,p.data_compression,p.data_compression_desc order by 3 desc' ; SELECT * FROM ##TABLESIZES_ALLDB END GO |
Depuis la version 9i d'Oracle, la gestion de la mémoire peut se faire de manière automatique.
Le paramètre PGA_AGGREGATE_TARGET remplacant les paramètres SORT_AREA_SIZE et HASH_AREA_SIZE utilisé en 8i.
Il faut rappeler que la PGA est une zone mémoire privée où les processus allouent de la mémoire pour les opérations de tris, de hash ou de merge. De ce fait la zone de PGA est séparée de la SGA (System Global Area). Une troisième zone de mémoire, la UGA (User Global Area), maintient l'information sur l'état des sessions et des curseurs. En mode dédié, les processus alloue la zone UGA dans la PGA alors qu'en mode partagé la zone UGA est allouée dans la SGA (dans la LARGE POOL plus exactement).
Lire la suite : Secrets dans la gestion mémoire Oracle : La PGA
Relog.exe est un utilitaire intégré à l'OS windows et présent sur les windows XP,7,8 et 10 coté workstation et 2003, 2008, 2008R2 2012 coté serveur.
Cet utilitaire prend en entré un fichier de trace perfmon avec plus ou moins de compteurs actifs dans la trace.
Théoriquement il est facile d'intégrer ces traces dans une base de données avec la synthaxe suivante
relog matrace.blg -o SQL:DSNODBC!IDTRACE
Avec :
# conversion blg --> csv ls -r -include *.blg | foreach{relog $_ -f csv -o $_`.csv} # retrait de l'apostrophe ls -r -include *.blg.csv | foreach-object{(get-content $_) -replace "'"," " | set-content -path $_}
ls -r -include *.csv | foreach{relog $_ -o SQL:ODBC_MSS_PERFMON_2000K!"$($_.directory.name)"}
Modèle des tables de traces
Par contre le modèle des tables générées par relog (cf mdsn) ne me semble pas approprié pour un reporting performant. Le modèle est un modèle normalisé, très souple pour intégrer de nouveaux compteurs mais générant du coup 1 lignes par compteur et par capture.
J'ai l'habitude d'intégrer de nombreux compteurs sur un serveur MS SQL Server. Ces compteurs sont d'autant plus nombreux qu'il y a d'instance hébergées sur la machine. Avec 6 instances SQL server 2005 je monte à plus de 400 compteurs entre les compteurs système (cpu,mem, disques, réseau) et les compteurs sgbd (lock/latches, buffer, session, log, fichier et autres ratios... Si on fait un capture toute les minutes on a 60 * 24 * 400 = 500.000 lignes par jour par machine.
Si on souhaite intégrer les traces de dix machines (60 instances) on se retrouve avec 5.000.000 de lignes par jours
Il est donc indispensable de purger ces tables de traces: par un batch de nuit pas exemple. Une conservation sur 30 jours maximum me parait une bonne approche.
Une des solutions pour réduire le volume de données est de ré-échantilloner les données via relog -t en utilisant un ré-échantillonage toute les 5 ou 10 minutes par exemple.
Articles traitant de l'intégration de données
Des tutoriaux et cours gratuits sur Oracle
Tutoriaux sur Unix et les shells scripts